Neural Network--机器学习笔记4

写在前面

本系列是Machine Learning-Andrew Ng学习后整理的读书笔记。

本节主要介绍神经网络部分知识。

神经网络

神经元

作为神经网络基本组成单位,神经元主要有激励信号(输入信号)、权重等组成。

神经元

其中$a_1^{(i)},a_2^{(i)},a_3^{(i)}$为第$i$级激励信号,即输入信号$\boldsymbol{x}$。$\theta^{(i)}$为第$i$层神经网络的权重系数。
$$
z_1^{(2)}=\boldsymbol{\theta}_{10}^{(1)}x_0+\boldsymbol{\theta}_{11}^{(1)}x_1+\boldsymbol{\theta}_{12}^{(1)}x_2+\boldsymbol{\theta}_{13}^{(1)}x_3 \\
z_2^{(2)}=\boldsymbol{\theta}_{20}^{(1)}x_0+\boldsymbol{\theta}_{21}^{(1)}x_1+\boldsymbol{\theta}_{22}^{(1)}x_2+\boldsymbol{\theta}_{23}^{(1)}x_3 \\
z_3^{(2)}=\boldsymbol{\theta}_{30}^{(1)}x_0+\boldsymbol{\theta}_{31}^{(1)}x_1+\boldsymbol{\theta}_{32}^{(1)}x_2+\boldsymbol{\theta}_{33}^{(1)}x_3 \\
a_1^{(2)}=g(z_1^{(2)}) \\
a_2^{(2)}=g(z_2^{(2)}) \\
a_3^{(2)}=g(z_3^{(2)})
$$
整理成向量形式,即
$$
a^{(l)}=\begin{bmatrix}
a_0^{(l)}\\
a_1^{(l)}\\
\dots\\
a_n^{(l)}
\end{bmatrix},z^{(l)}=\boldsymbol{\theta}^{(l-1)}a^{(l-1)}
$$
然而只含一层结构的神经网络,其表达能力有限,只能用来进行线性分析。如下图,单层神经网络可以很好表示AND, OR, NOT等,但是对于XOR却无法表示(非线性不可分)。

线性模拟

代价函数

简单的考虑,多输出神经网络即为多分类的逻辑回归。相应的代价函数即为多个分类器代价函数之和。

代价函数

注意,这里的正则项需剔除$\boldsymbol{\theta}$的常系数对应项。

反向传播算法

反向传播算法(Backpropagation Algorithm)是神经网络中用于最小化代价函数的方法。我们的目标是设定最优化权重$\boldsymbol{\theta}$使得代价函数最小,即$\min_{\theta}J(\theta)$。例图

以上图一个三层网络为例,整个算法流程如下

Back propagation Algorithm

设有5000个样本,每个样本有400个特征。隐含层输入单元为25,输出层单元为10。即
$$
\boldsymbol{X}=\boldsymbol{X}_{5000\times400} \\
\boldsymbol{a^{(1)}}=\boldsymbol{a}_{5000\times (400+1)},
\boldsymbol{\theta^{(1)}}=\boldsymbol{\theta}_{25\times (400+1)} \\
\boldsymbol{a^{(2)}}=\boldsymbol{a}_{5000\times(25+1)},
\boldsymbol{\theta^{(2)}}=\boldsymbol{\theta}_{10\times(25+1)} \\
\boldsymbol{a^{(3)}}=\boldsymbol{a}_{5000\times10} \\
\boldsymbol{y}=\boldsymbol{y}_{5000\times10}
$$
1.利用前向计算,依次计算$a^{(1)},a^{(2)},\dots,a^{(l)}$,注意,这里除了第$L$层,$a^{(l)}$需在最前端增加一列’1’作为偏差值的系数。

2.计算最后一层的误差$\delta^{(l)}=a^{(l)}-y,dim3=[5000,10]$

3.依次计算前一层的误差值,$\delta^{(l-1)}=\delta^{(l)}\boldsymbol{\theta}^{(l-1)}.g’(z^{(l)}),dim2=[5000,26]$,注意,对于中间层,需*剔除第一列,即偏差项对应的误差值。

4.计算偏导数(不含正则项),$\Delta^{(l)}=\Delta^{(l)}+(\delta^{(l+1)})^Ta^{(l)}$,注意,这里$\Delta^{(l)}$维度应与$\boldsymbol{\theta}^{(l)}$相同。

5.计算含有正则项的偏导数
$$
D^{(l)}_{i,j}:=\begin{cases}
\frac{1}{m}(\Delta^{(l)}_{i,j}+\lambda\boldsymbol{\theta}^{(l)}_{i,j})&j\neq0\\
\frac{1}{m}(\Delta^{(l)}_{i,j})&j=0
\end{cases}
$$

梯度检测

梯度检测(Gradient checking)可以确保在反向传播算法中梯度求值的正确性,实际上这里利用了导数的极限概念,即利用下式来计算导数的近似值并与反向传播算法求得的导数进行比较。

求导

随机初始化

若对权重参数$\boldsymbol{\theta_{ij}^{(l)}}$做相同初始值,将导致下图中前向运算$a_1^{(2)}=a_2^{(2)}$,从而导致BP计算时$\delta_1^{(2)}=\delta_2^{(2)}$,继而参数更新时,$\boldsymbol{\theta_{ij}^{(l)}}$以相同值进行更新,即整个神经网络都进行了相同的计算。即随机初始化的作用就是打破对称性。

相同初始化

一种有效的随机初始化方式如下

1
2
epsilon_init=0.12;
W=rand(L_out,1+L_in)*2*epsilon_init-epsilon_init;

其中$\epsilon_{init}=\frac{\sqrt{6}}{\sqrt{L_{in}+L_{out}}}$,$L_{in}=row_{\theta},L_{out}=column_{\theta}$。

本文标题:Neural Network--机器学习笔记4

文章作者:Lumo Wang

发布时间:2018年03月14日 - 15:03

最后更新:2018年11月07日 - 15:11

原始链接:https://luameows.github.io/2018/03/14/学习笔记-机器学习笔记4-神经网络/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

请我喝杯咖啡,我会继续熬夜的~