1.线性回归的参数是向量,神经网络中的参数是矩阵
2.内容是取出矩阵中的参数并展开成向量得到梯度返回值
上面命令为合并,合并为一个很长的向量,下面命令为取出,取出为矩阵
西塔为矩阵,使用矩阵储存参数可以使前向传播和反向传播更加方便,更容易充分利用和向量化实现。
以上为让参数在矩阵和向量这两种形式之间完成转换
梯度检验
代价函数的双侧差分近似等于单价函数在该点的导数值
当西塔为向量的时候
代码如下
DVec为用反向传播算法计算出的导数DVec,如果两者相近,则可以验证反向传播的实现是正确的
反向传播过程和梯度检验的注意事项
再用反向传播算法训练样本时要关闭梯度检验,否则程序执行很很慢。当用梯度检验证明反向传播过程是正确的时候就可以关闭梯度检验来训练样本了
随机初始化
权重西塔初始化不能相等,否则每层的不同单元计算的结果都是一样的,会造成高度冗余,称为对称权重问题
为了解决这个问题,在神经网络算法中对参数进行初始化时要使用随机初始化的思想
将参数西塔随机成接近0的范围之间,再进行反向传播,再进行梯度检验,最后使用梯度下降或其他高级优化算法 来最小化代价函数J关于参数西塔的函数,从而计算西塔的最优值
神经网络架构
训练神经网络需要实现的步骤
1.构建一个神经网络,然后随机初始化权重,初始值很小,接近于0
2.执行前向传播算法,对于每个输入的x(i),计算h(x(i)) ,为一个输出值y的向量
3.通过代码计算代价函数J
4.执行反向传播算法来算出这些偏导数项,即J(西塔)关于参数西塔的偏导数
使用for循环对要训练的样本进行反向传播
5.用梯度检验来比较已经得到的偏导数项,把用反向传播得到的偏导数值与用数值方法得到的估计值进行比较从而确定反向传播算法计算得到的结果是否是正确的,最后要关闭梯度检验,因为梯度检验计算得非常慢
6.最后用一个最优化算法例如梯度下降算法或者其他更高级的算法将这些算法与反向传播算法结合计算出偏导数项的值,来最小化关于西塔的代价函数J
代价函数J不是凸函数(可以停留在局部最小值的函数)
反向传播算法的目的就是计算出梯度下降的方向,而梯度下降的作用就是沿着这个方向一点点下降
一切的算法都是为了使得神经网络的输出值与训练集中y的实际值尽可能接近。