反向传播算法(Back Propagation):

引言:

在逻辑回归中,我们使用梯度下降法求参数方程的最优解。

这种方法在神经网络中并不能直接使用,

因为神经网络有多层参数(最少两层),(?为何不能)

这就要求对梯度下降法做少许改进。


实现过程:

 一、正向传播

首先,同逻辑回归,我们求出神经网络输出与实际值的“误差”——COST:

这里先使用欧式距离而不是索夫曼函数作为输出的cost:

展开之后:

(注意右边的权重衰减项,既规则化)

二、反向传播

对于第  层(输出层)的每个输出单元 ,我们根据以下公式计算残差

对  的各个层,第  层的第  个节点的残差计算方法如下

这里:

这里相当于把本层节点的残差按照权重“投影”到上一层残差的节点上(“反向传播”就是这个意思)

在计算出各节点的残差之后,参数的偏导如下计算:

然后就可以梯度下降去了!

梯度下降过程:

1、进行前馈计算,求的所有节点的输出,求得cost;

2、进行反向传播计算,求的所有节点残差(第nl ~ 第2层)

3、利用公式求得cost对参数的偏导

4、更新偏导。

5、重复1~4知道cost差距小于预设值或重复次数大于预设值

(这里以上只讲实现方法,省略所有证明。相关证明贴于最后。)


随机初始化( Random Initialization):

在进行第一次前馈算法之前,神经网络参数的值是多少呢?

全零初始化?这是不可以的!

如果选择相同的参数进行初始化,

隐藏节点的出入必定相同(自己推推,更不用说输出了)。

为了使得对称失效,我们对神经网络的参数进行随机初始化,

既采用接近零的初始值进行初始化

这个过程可以用matlab产生随机矩阵的功能来实现。

初始化之后,让我们一起下降吧!


用到的证明(残差的计算):

1、

2、

最新文章

  1. yii 项目根目录下需要有assets目录
  2. [转] Linux下防火墙iptables用法规则详及其防火墙配置
  3. 【jmeter】逻辑控制器
  4. Linux安装配置php环境的方法
  5. Swift2.0新特性
  6. 用python正则表达式提取字符串
  7. iOS 多线程详解
  8. unmount的时候报错
  9. OpenLayers访问WTMS服务及添加Googlemap
  10. ECharts-百度地图使用
  11. bigdecimal更精确的浮点处理方式
  12. win10 uwp 简单MasterDetail
  13. d3js scales深入理解
  14. 几种归一化方法的概念及python实现
  15. Spark RDD的默认分区数:(spark 2.1.0)
  16. OSI的七层模型介绍
  17. linux下网络查看命令ss
  18. Mac配置SDK+JDK环境
  19. Hadoop分布式远程Debug方式
  20. SE Springer小组《Spring音乐播放器》可行性研究报告一、二

热门文章

  1. 【Hive】数据去重
  2. LeetCode OJ:Remove Element(移除元素)
  3. react: typescript-webpack项目基本配置
  4. RAD Studio Mobile Roadmap updated,XE5 will released on next month, Andriod will be supported.
  5. terminal小工具
  6. 不同apk的activity互相调用
  7. php str_pad() 用法
  8. HDU - 6333:Harvest of Apples (组合数前缀和&莫队)
  9. ASP.NET 线程详解
  10. Java基础总结大全