目录
复习Andrew Ng的课程Machine Learning,总结神经网络笔记一篇,涵盖课程week4、week5。
一、非线性估值Non-Linear Hypothesis
前面两篇博客讨论的技术——线性回归、逻辑回归,不管估值函数



举个例子,在图像分类问题中,分类是否是一个“汽车”。一张50×50分辨率的图像有2500个像素,这2500个像素就是2500个特征(如果是RGB图像,那么就是2500×3=7500个特征)。如果加上非线性,即使只加入二次方的非线性,特征数也会达到约300万个。
![]() |
特征总数 | |||||
![]() |
+ | ![]() |
+ | ![]() |
= | ![]() |
如此巨大的数据量使得非线性估值特别困难。因此,要想办法——引入神经网络Neural Network。神经网络要从神经元与大脑 Neurons & Brains说起。这个算法就是模仿神经系统工作的方式,详情看图,顺便认识几个医学、生物学英语单词。dendrite 树突,也就是神经元的输入;nucleus 细胞核; axon 轴突,也就是神经元的输出;
模仿神经元,我们建立自己的逻辑单元。输入有

二、神经网络建模 Neural Network
Neural Network一般分为3类层次
- 输入层input layer;一般记作layer1;
- 隐(含)层hidden layer;可以有多层,一般记作layer2、layer3……
- 输出层output layer,视模型情况确定输出个数;最后一层layer
约定符号Notation及推导



这个最简单的神经网络传播过程就是这样的

If network has



如果网络中layer j有




神经网络的分层结构,每一层都是下一层的输入。通过精心选择每一层的参数,就能构造出复杂的特征组合,从而避免了用第一层输入获得大量非线性组合的弊端。分层后,每层都作为下一层的输入,是更好的特征选择!!
三、复习逻辑回归问题矩阵式
重新考虑上一节的推导过程,可以写成矩阵式。训练集的特征




3.1 没有进行正则化

3.2 进行正则化
正则化要特别注意,不要对


四、神经网络的代价函数
4.1 符号约定Notation

我们的多分类问题的label换了一个形式,不再是标量,而是一个向量,每个维度=1代表一个分类。

4.2 代价函数


其中,输出是一个向量



第一项是适应代价函数,一个样本估值有k个分量,一个label有k个分量,先对k个分量偏差求和,再对m个样本求和。
第二项是正则化部分,是把每层矩阵的每个元素都平方求和。每个矩阵是


五、反向传播算法 Backpropagation Alg
5.1 任务
和前面讨论过的技术一样,这次的任务是


5.2 一个训练样本
以上面这个网络为例,给出了一个训练样本


再计算backpropagation。
Intuition:

For each output unit (layer L = 4)


然后考虑其他隐藏层的输出误差。
注意到


注意到,



注意,不要计算

5.3 一个训练集
这一部分给出了反向传播算法的实现过程,直接写英文了。由于Andrew Ng的PPT里面使用了两个

Traing Set

Set

For

Set

Perform forward propagation to compute




Compute




最终结论,

5.4 实现细节——随机初始化权重
与线性回归、逻辑回归的初始化权重不同,反向传播算法初始化权重一定不能全部初始化为0。
假如我们将权重


解决这个问题的办法就是随机初始化权重。我们选取一个足够小量


选取


选取权重的方法是,随机生成



5.5 实现细节——梯度检查
反向传播算法异常复杂,实现起来容易产生bug。而且,即使出现bug,梯度下降看起来也是正常的,无法从收敛结果上直观发现这类bug。因此要想办法发现bug。这就是梯度检查。
回想逼近切线的方法,我们逐渐逼近得到切线的斜率。图太难画了,直接截图Andrew Ng的PPT。
这个方法,也是选取一个足够小量




那么

我们可以用



六、识别手写数字神经网络的实现过程
6.1 前项传播实现代价函数
这一部分,描述了神经网络作业的实现过程——识别手写数字神经网络。
训练集有5000个训练样本。输入是20×20的灰度图像,并被拉成一个400×1的特征向量,label是一个数字,表示图像被识别成0~9里面的一个数字。为了方便octave的索引,我们将数字0映射到label数字10,数字0~9映射到label数字0~9。

神经网络模型如图,有一个Input Layer,一个Hidden Layer,一个Output Layer。Hidden Layer有25个神经元。由此算来,加上偏置单元我们可以得到权重矩阵的维度。

根据代价函数的定义,我们分两部分实现。
前项传播实现训练集的部分,注意
- 添加各层的偏置单元
- Label
的向量化

实现正则化部分,注意权重和
都包含了偏置单元的权重,正则化部分不应该包含这一部分。可以将权重赋值给临时变量,再将偏置单元权重置0。

代价函数最终结果

6.2 前向传播+反向传播实现导数
初始化

遍历训练集




将累加后的

正则化部分,注意正则化部分不包括偏置单元。

导数最终结果

6.3 实现随机初始化权重
这一部分的实现相对简单,参看 5.4 实现细节——随机初始化权重。
6.4 实现sigmoid导数
注意sigmoid的导数具有这样的性质,

来源:CSDN
作者:苦行僧(csdn)
链接:https://blog.csdn.net/qpeity/article/details/104039416