@FE40536
2019-08-06T19:32:32.000000Z
字数 1959
阅读 1393
算法
机器学习
首先任然介绍一些符号的意义:
表示的是神经网络的层数
表示的是第层的神经元数
神经网络分类的代价函数,相当于把多个输出项里求了一次和,再合到一次求了一次和。
神经网络的计算顺序,以单个训练集为例
反向传播求导
正向传播过程(最后一步应该是)
用一个样本来理解一下反向传播
可以理解为用误差和权重来反向求得们的偏导数
对于一个输入层有十层,隐藏层有十层的神经网络,可以得到10×11的矩阵一个和一个1×11的矩阵,但这里给出了两个10×11的矩阵。
还可以得到同样多的求导矩阵
在octave中,要想将三个theta矩阵或者D矩阵转化为向量,可以用图中的代码来实现
要想将向量再转化为矩阵,可以用rashap函数来实现
octave:1> Theta1=ones(10,11)
Theta1 =
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
octave:2> Theta2=2*ones(10,11)
Theta2 =
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
octave:3> Theta3=3*ones(1,11)
Theta3 =
3 3 3 3 3 3 3 3 3 3 3
octave:4> thetaVec=[Theta1(:);Theta2(:);Theta3(:)];
octave:5> size(thetaVec)
ans =
231 1
octave:6> reshape (thetaVec(1:110),10,11)
ans =
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
octave:7> reshape(thetaVec(111:220),10,11)
ans =
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2
octave:8> reshape(thetaVec(221:231),1,11)
ans =
3 3 3 3 3 3 3 3 3 3 3
双侧差分法可以让我们得到点近似的斜率,可以通过以下代码实现
对于一个可以按照图中的方法来得到数值上相近的导数值
我们可以用for循环来将一个n维的theta向量里的每一个值都进行双侧差分求得近似的梯度,再和反向传播得到的梯度进行对比,如果相差很小,那说明反向传播能够正常地发挥作用
如果里面的值都变成0的话,到最后会变成所有的激活值是一样的,会大大的抑制神经网络学习
于是我们为了避免这种权重对称现象,可以用rand函数将初始化为接近0的随机值来让接下来的正向传播、反向传播、梯度检验、梯度下降最小化代价函数
对于神经网络模型的构建,输入层和特征数相关,输出层个数和对应的情况相关,多种情况的话推荐将输出层设置层向量形式
对于隐藏层来说,通常是越多越好,但是计算量会增大
训练神经网络步骤