机器学习5
第一节里面讲了一个大而全的针对神经网络的cost Function
Backpropagation Algorithm
想要求导偏导数是比较困难的。以下是前向传播的算法:
可以看出会比较繁琐。然后这是后向传播
NG说了back的这个也是相当的复杂的,所以,我再说一节给大家感受一下
- 说到了一个梯度检验算法,用来证明你做的梯度下降是没有错的。
程序作业
第一项 理解多种结果的逻辑回归分类并计算cost function
多种化为传统
在原来的看法中,以0,1为例,我们将产生这两种结果的cost function定义如下:
若是y有多种结果,我们可以假想为,若有n种结果
- 第一个函数计算 (y == x)
- 第二个函数计算 (y != x)
如此实现了从多种到传统的过度。
函数整合
针对两个函数整合到一起的函数使用的是(y)和(1-y)的小技巧,实现了不是第一个函数就是第二个函数的功能。
举例假设
- 有5000个样例,10个分类,所以基本的特征函数产生有5000*10的矩阵A
- 5000个样例有5000个label,针对这些label,处理成为(01)格式,得到5000*10的矩阵B
- 例如 y=5 处理为(0,0,0,0,1,0,0,0,0,0)
costFunction = -log(A) . B + (-log(1-A)) . (1-B);
(注意:这里是点乘)
1 | costFunction = -log(A) .* B + (-log(1-A)) .* (1-B); |
反向传播
反向传播花了我好长时间,一直想用程序的角度来解决处理矩阵的问题,然后发现多此一举。
原来在反向传播中
- 先做一遍正向的推导
- 从后向前计算误差值(关键点是:如果不是处理成向量来做,那么每一层的误差据真是不一样的)
- 计算梯度
- 正规化