主程序的执行流程
1. 对各Layer和Synapse的初始化
a) 初始化各Layer和Synapse的Learner (BasicLearner, BatchLearner, RpropLearner)
2. 循环多次向前和向后的过程
a) stepForward
i. Training Data中取出一个pattern(样本)作为输入
ii. 调用InputLayer的forward方法(激化函数),在本例中是Y=beta*X
iii. 把结果输出到对应的OutputSynapse中,并调用forward方法(与权值矩阵相乘,储存在outs对象里)
iv. 从outs对象里取出数据并调用HiddenLayer的forward方法,在本例中是Y=1/1+eX
v. 同步骤3)
vi. 从outs对象里取出数据并调用OutputLayer的forward方法,在本例中是Y=1/1+eX
vii. 把结果输出到对应的TeacherSynapse中,并调用forward方法(把与Desired Data里样本的差值储存在outs对象里)
b) stepBackward
i. 从TeacherSynapse的outs对象里取出数据并放入gradientInps对象中,并调用OutputLayer的backward方法,本例中是gradientOuts=gradientInps*[out*(1-out)+a]
ii. 把gradientOuts输出到对应的InputSynapse中,并调用backward方法
1. 与权值矩阵相乘,放入bouts对象里,作为输出
2. 修改权值矩阵
a) aDelta=defaultDelta+momentum*delta[i][j]
注:1)defaultDelta=learningRate*gradientWeight 2)gradientWeight=gradientOuts*inps
b) delta[i][j]=aDelta
c) value[i][j]=value[i][j]+delta[i][j]
iii. 对于HiddenLayer和InputLayer类似与过程1),2)
3. 对各Layer和Synapse停止和清理
a) 同向前传播一次零样本,达到各Layer和Synapse清理工作