机器学习——神经网络参数的反向传播算法

代价函数(神经网络在分类问题中的应用)

分类问题为多元分类和二元分类
代价函数

反向传播算法

delta是没有1层的,因为第一层是我们的观测值,没有误差
经过后面的推导,忽略了λ(正则项),就会得到左下角代价函数的偏导项
单个训练样本

反向传播算法计算后,累计误差的结果等于对代价函数的偏导。
i 指的是第几个样本
j 指的是第 l 层的第 j 个节点
累计误差的计算通过上面的代价函数,和对应的梯度,可以使用高级优化算法,实现参数求解

理解反向传播

反向传播具体的“error计算过程”反向传播具体的“error计算过程”

使用高级优化算法时,注意的参数展开

高级算法函数
theta 展开成向量
矩阵和向量的转换
代价函数的返回值如何计算?先通过theta计算得来每层的 “error”,然后将“error”也向量化返回,同时计算代价函数返回
代价函数和梯度值的计算

梯度检测

通过定义算来的梯度和反向传播法算来的梯度进行比较,如果接近的话,就可以放到高级优化算法里面进行theta的求解
梯度检测
运行梯度检验算法时注意的事项
梯度检测时注意的事项

初试随机化

全0初始化不再适用于神经网络
初始化

要使用随机初始化思想

在正负对称的区间随机生成初始化theta矩阵

总结在一起实现神经网络(putting it together)

step1:选择一个网络结构

选择原则:
1)特征的维数决定了选择输入端的units个数;
2)最终要分成的类别的多少决定了输出单元的个数;
3)3个特征时,一个隐藏层,5个隐藏单元是比较合理的结构;可以增加隐藏层的层数,也可以增加每层的隐藏单元的个数(越多越好),不过随之而来的计算量需要考虑进去;需要注意的是尽量保持每个隐藏层的单元个数一致,并且单元个数一定要大于特征数(2,3,5倍都是可以的);

step2:初始化随机权重theta
一般情况下,初始化为对称区间的接近于0的值,当然这些都是随机的;

step3:执行向前传播算法
执行向前传播算法,利用每个输入样本特征x(i),根据初始化的theta,计算出 h(x(i));

step4:计算代价
由于已经算出来了预测值,则可以根据代价函数算出此样本条件下的代价 J(theta);

step:5:反向传播算法
第3步到第5步是需要重复m(样本数)次,每次都能得到所有层的节点激励项值 al 和“ δl ”,于是就可以计算出单个样本的theta的梯度,运行m次以后,就可以得到这m个训练样本在当前theta下的总的误差值,然后求平均后,再考虑正则化,最后两者相加构成最终的对于theta的梯度D。(详尽的公式 见 “反向传播算法” 图)

step6:梯度检测
将上述步骤得来的梯度与数值法(偏导数的定义方法)得来的梯度进行比较检测确保两者接近后,然后关闭这个梯度检测算法,因为我们只需要检测一次我们反向传播算法是正确的即可,否则运算量将太过庞大;

step6:梯度下降或者高级优化算法
最后,我们已经利用反向传播算法计算出了代价函数的偏导数,也就是theta的梯度值,然后可以借助梯度下降算法,或者其他高级优化算法使得代价函数最小化,从而得到神经网络的参数(parameters):theta。

需要注意的是,这里的代价函数是非凸的,因此无论是梯度下降算法,还是高级优化算法都有可能求得的值是局部最优解,尽管如此,得到的最后的解还是可以接受的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值