This is a question arising from the deep learning post. You talk of comparing "ordinary programs" with "machine learned programs", but what is it actually that you call the program in the second category?
Is the training code part of the program?
Is the training data part of the program?
Or is the "program" just the network structure and the final choice of weights?
You seem to suggest the latter, minimalist view, when you talk of a program "obtained by training". But I think this is a non-obvious choice that should be clarified and discussed.
There actually is a similar question with meta-programs, for example Coq proofs. When we talk of Compcert, the formally-correct compiler program, let's assume that we encompass the proofs in our view of what the program is. (They certainly are where most of the programming effort goes.) Are we talking of the tactics code (the scripts the human wrote), or of the CIC proof terms?
For meta-programs, or even for programs that get compiled to a lower-level representation, there is a pretty clear consensus I think that we include the source that the humans wrote in part of the "program". (It depends on the context, it matters a lot where we talk about programming, it matters less when we talk about program execution, and it is an interesting question when we talk about monitoring/auditing/certification.) This point of view would suggest including the training code (and the training run data) as part of our view of the "program" in the machine-learned setting.
This is a question arising from the deep learning post. You talk of comparing "ordinary programs" with "machine learned programs", but what is it actually that you call the program in the second category?
You seem to suggest the latter, minimalist view, when you talk of a program "obtained by training". But I think this is a non-obvious choice that should be clarified and discussed.
There actually is a similar question with meta-programs, for example Coq proofs. When we talk of Compcert, the formally-correct compiler program, let's assume that we encompass the proofs in our view of what the program is. (They certainly are where most of the programming effort goes.) Are we talking of the tactics code (the scripts the human wrote), or of the CIC proof terms?
For meta-programs, or even for programs that get compiled to a lower-level representation, there is a pretty clear consensus I think that we include the source that the humans wrote in part of the "program". (It depends on the context, it matters a lot where we talk about programming, it matters less when we talk about program execution, and it is an interesting question when we talk about monitoring/auditing/certification.) This point of view would suggest including the training code (and the training run data) as part of our view of the "program" in the machine-learned setting.