此文是斯坦福大学,机器学习界 superstar — Andrew Ng 所开设的 Coursera 课程:Machine Learning 的课程笔记。力求简洁,仅代表本人观点,不足之处希望大家探讨。
课程网址:https://www.coursera.org/learn/machine-learning/home/welcome
Week 4:Neural Networks_1笔记:http://blog.csdn.net/ironyoung/article/details/48153375
对于BP(backpropagation),以前写过心得以及资料的总结,最终利用C++实现了简单的BP神经网络。具体见这里:《C++从零实现BP神经网络》
上一篇blog中,介绍了前向传播(forward propagation)的过程,以及神经网络计算非线性问题的例子(XOR问题)
这一篇blog中,开始介绍,如何来计算神经网络中各种参数的方法:后向传播(backward propagation)
Cost Function
为了拟合神经网络的各个参数,我们首先需要规定一些变量:
- m个样本:{ (x(1),y(1)),(x(2),y(2)),...,(x(m),y(m)) }
- 神经网络层数(包括输入层、输出层): L
- 每层上的神经元个数(不包括每层上的偏差单元,也就是输入恒为1的单元):
Sl ,如果是最后一层则记为: SL
- 不同分类问题:若分为2类,其实用一个神经元作为输出层就可以了,用 y=0 和 y=1 区分;多类问题,利用以前说过的,分为K类则最终的 y∈RK ,例如分为三类的问题输出可选择为 y=(100)T,y=(010)T,y=(001)T
- 因为同样是分类问题,我们回想一下逻辑回归的cost function,其实神经网络的相同,只不过是对于分为K类问题的版本而已:
J(θ)=−1m[∑i=1m∑k=1K(y(i)klog(hθ(x(i)))k+(1−y(i)k)log(1−hθ(x(i)))k)]+λ2m∑l=1L−1∑i=1Sl∑j=1Sl+1(θ(l)