目录
1 感知机:神经网络的基石
1.1 简简单单的感知机
Frank Rosenblatt在70年前就提出了感知机(perceptron)
算法。感知机接收多个输入信号,输出一个信号。下面是两个输入的感知机示意。
x 1 x_1 x1、 x 2 x_2 x2是输入信号, w 1 w_1 w1、 w 2 w_2 w2是对应权重,输入经过加权后的和超过阈值 θ \theta θ即输出1,否则输出0,输出结果记作 y y y。权重决定对应节点对结果影响的程度。
y = { 0 ( w 1 x 1 + w 2 x 2 ≤ θ ) 1 ( w 1 x 1 + w 2 x 2 > θ ) (1.1) y=\left\{ \begin{aligned} 0 \ \ \ (w_1x_1+w_2x_2 ≤ \theta) \\ 1 \ \ \ (w_1x_1+w_2x_2 > \theta) \end{aligned} \right. \tag{1.1} y={0 (w1x1+w2x2≤θ)1 (w1x1+w2x2>θ)(1.1)
以上就是感知机的全部原理,可以用于解决一些线性问题。
1.2 感知机实现门电路
(1)与门(AND gate)
数字电路中,与门接收两个输入,当两个输入都为1时,结果才为1。
x 1 x_1 x1 | x 2 x_2 x2 | y y y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
将上面的结果带入式(1.1)中可以得出, w 1 , w 2 , θ w_1, w_2, \theta w1,w2,θ三个参数满足下面的条件即可实现与门:
{ w 1 + w 2 > θ w 1 ≤ θ w 2 ≤ θ θ ≥ 0 (1.2) \left\{ \begin{aligned} w_1+w_2>\theta \\ w_1≤\theta \\ w_2≤\theta \\ \theta≥0 \end{aligned} \right. \tag{1.2} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧w1+w2>θw1≤θw2≤θθ≥0(1.2)
比如,当 ( w 1 , w 2 , θ ) = ( 0.5 , 0.5 , 0.7 ) (w_1, w_2, \theta)=(0.5, 0.5, 0.7) (w1,w2,θ)=(0.5,0.5,0.7),即可满足与门的要求。
(2)或门(OR gate)
x 1 x_1 x1 | x 2 x_2 x2 | y y y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
w 1 , w 2 , θ w_1, w_2, \theta w1,w2,θ三个参数满足下面的条件即可实现或门:
{ w 1 > θ w 2 > θ θ ≥ 0 (1.3) \left\{ \begin{aligned} w_1>\theta \\ w_2>\theta \\ \theta≥0 \end{aligned} \right. \tag{1.3} ⎩⎪⎨⎪⎧w1>θw2>θθ≥0(1.3)
比如,当 ( w 1 , w 2 , θ ) = ( 0.5 , 0.5 , 0.2 ) (w_1, w_2, \theta)=(0.5, 0.5, 0.2) (w1,w2,θ)=(0.5,0.5,0.2),即可满足或门的要求。
(3)与非门(NAND gate)
x 1 x_1 x1 | x 2 x_2 x2 | y y y |
---|---|---|
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
w 1 , w 2 , θ w_1, w_2, \theta w1,w2,θ三个参数满足下面的条件即可实现或门:
{ w 1 + w 2 ≤ θ w 1 > θ w 2 > θ θ < 0 (1.4) \left\{ \begin{aligned} w_1+w_2≤\theta \\ w_1>\theta \\ w_2>\theta \\ \theta<0 \end{aligned} \right. \tag{1.4} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧w1+w2≤θw1>θw2>θθ<0(1.4)
比如,当 ( w 1 , w 2 , θ ) = ( − 0.5 , − 0.5 , − 0.7 ) (w_1, w_2, \theta)=(-0.5, -0.5, -0.7) (w1,w2,θ)=(−0.5,−0.5,−0.7),即可满足与非门的要求。
(4)异或门(XOR gate)
x 1 x_1 x1 | x 2 x_2 x2 | y y y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
将上面的结果带入式(1.1)中,得到:
{ w 1 + w 2 ≤ θ w 1 > θ w 2 > θ θ ≥ 0 (1.5) \left\{ \begin{aligned} w_1+w_2≤\theta \\ w_1>\theta \\ w_2>\theta \\ \theta≥0 \end{aligned} \right. \tag{1.5} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧w1+w2≤θw1>θw2>θθ≥0(1.5)
根据上式前三个条件可以得出 2 θ < w 1 + w 2 ≤ θ ⇒ θ < 0 2\theta<w_1+w_2≤\theta \Rightarrow \theta<0 2θ<w1+w2≤θ⇒θ<0,这与第四个条件是矛盾的。所以简单的感知机无法模拟出异或门。
简单的感知机是线性分类器,无法处理异或门这样的非线性问题。
异或门的制作方法有很多,此处我们使用多层感知机
来实现。高端的功能往往只需简单的重复。
我们罗列所有可能的情况,对照上面的示意图,走一遍逻辑计算过程。
x 1 x_1 x1 | x 2 x_2 x2 | s 1 s_1 s1 | s 2 s_2 s2 | y y y |
---|---|---|---|---|
0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 0 |
2 从感知机到神经网络
2.1 另眼看感知机
(1)添加激活函数
我们对式(1.1)做一下修改:
y = { 0 ( b + w 1 x 1 + w 2 x 2 ≤ 0 ) 1 ( b + w 1 x 1 + w 2 x 2 > 0 ) (2.1) y=\left\{ \begin{aligned} 0 \ \ \ (b+w_1x_1+w_2x_2 ≤ 0) \\ 1 \ \ \ (b+w_1x_1+w_2x_2 > 0) \end{aligned} \right. \tag{2.1} y={0 (b+w1x1+w2x2≤0)1 (b+w1x1+w2x2>0)(2.1)
变换形式如下:
{ a = b + w 1 x 1 + w 2 x 2 y = h ( a ) (2.2) \left\{ \begin{aligned} a&=b+w_1x_1+w_2x_2 \\ y&=h(a) \end{aligned} \right. \tag{2.2} {ay=b+w1x1+w2x2=h(a)(2.2)
其中
h ( x ) = { 0 ( x ≤ 0 ) 1 ( x > 0 ) (2.3) h(x)=\left\{ \begin{aligned} 0 \ \ (x≤0) \\ 1 \ \ (x>0) \end{aligned} \right. \tag{2.3} h(x)={0 (x≤0)1 (x>0)(2.3)
h
(
x
)
h(x)
h(x)函数将输入信号的加权和转化为输出信号,这种函数被称为激活函数(activation function)
。我们将图1-1做相应的变换,如下所示:
(2)多层感知机就是神经网络
“朴素感知机”是指单层网络,指的是激活函数使用了阶跃函数(即式2.3)的模型。“多层感知机”是指神经网络,即使用sigmoid函数等平滑的激活函数的多层网络。
我们将图1-3变换为神经网络的形式进行展示(隐去激活函数 h ( x ) h(x) h(x)):
最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层,有时也称为隐藏层。上图的神经网络形式是带有偏置 b ⃗ \vec{b} b 的。
2.2 激活函数的非线性
pass
3 网络的训练过程:参数的迭代更新
第1节中的感知机的参数是我们根据场景情况手动设定的,而在实际的神经网络中,参数的数量成千上万,在层数更深的深度学习中,参数的数量甚至可以上亿,想要人工决定这些参数的值是不可能的。我们需要让神经网络学会“从数据中学习”,由数据自动决定权重参数的值。
3.1 从解方程说起
不管是机器学习还是神经网络,都是为了解决实际的算法问题,典型的就是分类或回归。下面列举一个回归的案例。如图2.3,已知某种植物种子萌发后,幼苗的高度随天数呈线性增长,刚出土时情况如点A所示,两天后如点B所示。现在需要推算三、四、五天后的幼苗高度。
经常解方程的同学就知道了,该幼苗的生长遵循斜率为0.5、节距为1的方程 y = 0.5 x + 1 y=0.5x+1 y=0.5x+1,将 x = ( 3 , 4 , 5 ) x=(3,4,5) x=(3,4,5)依次带入方程即可得到想要的结果。
现在梳理上面案例的关键步骤对应的机器学习的术语。题目给定了问题的拟合模型为一元一次方程 y = a x + b y=ax+b y=ax+b(模型的选择),需要求解的就是方程的(a, b)参数。已知历史数据点A、B(训练数据),从而求解出参数(a=0.5, b=1)(训练)。最后使用得到的方程推测三、四、五天后的幼苗高度(推理)。
上面的例子很简单,最后得到了模型参数的解析解。但现实中的问题往往很复杂,如图2-4,展示的是某小朋友随着时间的流逝对某新买玩具的兴趣度。我们按照上面的顺序完成这个场景的建模。
观察散点的趋势,感觉比较符合一元二次方程 y = a x 2 + b x + c y=ax^2+bx+c y=ax2+bx+c或双曲线 y = a ( x − b ) − 1 + c y=a(x-b)^{-1}+c y=a(x−b)−1+c的样式,实际中可以选取一个,或都选取最后再比较。两种函数都是具备3个参数,按理使用3个点即可求出解析解。此处我们肯定不会只取三个点求出参数就结束了,我们的目标是让函数在最大程度上贴合所有散点,使得曲线与所有散点的综合误差最小。
经常做优化算法的同学就知道了,我们可以使用一些度量方法来描述这种误差,比如标准误差。我们的目的就是选择什么的参数组合(a, b, c)使得模型拟合散点的标准误差最小,标准误差可以表示为参数(a, b, c)的函数
L
(
a
,
b
,
c
)
L(a, b, c)
L(a,b,c),模型参数解析问题就转化成了函数最小值求解问题。此处标准误差就是该问题的损失函数(loss function)
,模型参数求解过程就是损失函数求极值的过程。
3.2 最优化:获取参数的数值解
解方程的时候,我们需要根据一些变换、公式计算参数的准确的解析解。但是复杂的方程是没有公式来给我们用的,且我们也没有必要获取参数的完美的解析解,只要使用优化算法求出数值解,保证结果的误差达到最小或在可接受的范围内即可。
优化算法中有一系列使得损失函数达到最小值的方法,这类方法在机器学习中被称为优化器(Optimizer)
,其中最有名的就是梯度下降法(gradient descent method)
。在此就不带大家复习中学知识了,需要了解更多请查询5.5。但是其中几个比较重要的概念可以提取出来讲讲。
梯度下降法中,站在损失函数当前点的位置(所有的参数都会有一个初始值,有很多参数初始化方法),需要求出此刻的对于不同参数的偏导,根据指定的步长沿着参数偏导的方向下降,到达下一个点的位置,即所有参数都有新的值,损失函数也有了新的值,直到损失函数的值在一定的迭代次数中变化量小于一定的阈值,视为达到了一个较为理想的最小值。这个过程中,步长就是机器学习中所说的学习率(learning rate)
,在任务开始之前就指定,所以也是大部分机器学习算法的超参数,可以全局固定,也可以有策略地变化。不同参数的偏导集合也被称为梯度(gradient)
,可以使用数学上的方法(如割线)依次求解损失函数对于每个参数的偏导得到。
3.3 参数更新的捷径:反向传播
使用传统的数学方法求偏导对于计算资源的要求太大,尤其是对有上亿参数的神经网络而言,这极大限制了神经网络的发展,反向传播方法的提出改善了这种窘境。
(1)计算图
计算图是一种理解反向传播运行原理的很好的方法。现在列举一个简单的例子来说明计算图的概念和正向传播(forward propagation)的过程。
问题1:小明买了2个苹果、3个橘子。其中,苹果每个100日元,橘子每个150日元。消费税是10%,请计算支付金额。
从左往右的正向传播的过程很简单很直观。现在来考虑一个新的问题。
问题2:小明听说苹果涨价了,想知道苹果的涨价对最终支付金额的影响。
这明显就是在求最终价格关于苹果价格的导数。我们将图3-1中的苹果部分摘取出来进行单独的分析。
反向传播需要我们从右往左看,涨价前购买苹果的最终支付金额为220元(记作 z z z),还没有加税的时候是200元(记作 t t t),苹果的单价为100元(记作 x x x)。 t t t 每增加1元, z z z 增加的金额为 ∂ z ∂ t = 1.1 \frac{\partial{z}}{\partial{t}}=1.1 ∂t∂z=1.1; x x x 每增加1元, t t t 增加的金额为 ∂ t ∂ x = 2 \frac{\partial{t}}{\partial{x}}=2 ∂x∂t=2, z z z 增加的金额为 ∂ z ∂ x = ∂ z ∂ t ∂ t ∂ x = 2.2 \frac{\partial{z}}{\partial{x}}=\frac{\partial{z}}{\partial{t}}\frac{\partial{t}}{\partial{x}}=2.2 ∂x∂z=∂t∂z∂x∂t=2.2。
更多的,我们也可以求出 z z z 关于苹果个数(记作 n n n)的导数 ∂ z ∂ n = ∂ z ∂ t ∂ t ∂ n = 110 \frac{\partial{z}}{\partial{n}}=\frac{\partial{z}}{\partial{t}}\frac{\partial{t}}{\partial{n}}=110 ∂n∂z=∂t∂z∂n∂t=110, z z z 关于消费税(记作 r r r)的导数 ∂ z ∂ r = 200 \frac{\partial{z}}{\partial{r}}=200 ∂r∂z=200。
可以看出,乘法节点的输出变量对于任一输入变量的导数就是另一个输入变量的值。
且一条链路上头尾的导数是链路上的所有节点的导数的乘积,这被称为链式法则
,符合我们学习复合函数求导的原理。
加法节点就更简单了,图3-1中,加法节点的任一输入增加 δ \delta δ,输出都会增加 δ \delta δ,所以加法节点的输出变量对于所有输入变量的导数均为1。
下图展示最终金额关于所有变量的导数,很快就能心算得出所有结果。
4 构建一个小型神经网络
pass
5 神经网络/深度学习的小把戏
5.1 全连接层及运算过程
全连接层(fully connected layers, FC)主要是可以对输入的矩阵或向量进行形状的变化,从而起到将学到的“分布式特征表示”映射到样本标注空间的作用。下面是一个向量 x ⃗ \vec{x} x 经过一个 n x × x y n_x×x_y nx×xy 全连接层被转化为向量 y ⃗ \vec{y} y 的示意图,其中向量 x ⃗ \vec{x} x 的维数为 n x n_x nx,向量 y ⃗ \vec{y} y 的维数为 n y n_y ny:
上图中, x ⃗ = [ x 1 , x 2 , ⋯ , x i , ⋯ , x n x ] \vec{x}=[x_1, x_2, \cdots, x_i, \cdots, x_{n_x}] x=[x1,x2,⋯,xi,⋯,xnx], y ⃗ = [ y 1 , y 2 , ⋯ , y i , ⋯ , y n y ] \vec{y}=[y_1, y_2, \cdots, y_i, \cdots, y_{n_y}] y=[y1,y2,⋯,yi,⋯,yny], w i o w_{io} wio 表示输入节点 i i i 指向输出节点 o o o 的连线的权重。
由图可知,全连接层的输入节点的个数与向量 x ⃗ \vec{x} x 的维数相等,全连接层的输出节点的个数与向量 y ⃗ \vec{y} y 的维数相等。输入节点与输出节点之间两两互相连接,形成 n x × x y n_x×x_y nx×xy 条连线,每条连接都赋予了一个权重值 w i o w_{io} wio,输入节点接收的数值需要与权重相乘之后才会被传递给输出节点,输出节点将所有与其连接的输入节点传递过来的值相加作为自己的值 y o y_o yo:
y o = w 1 o x 1 + w 2 o x 2 + ⋯ + w i o x i + ⋯ + w n x o x n x y_o=w_{1o}x_1 + w_{2o}x_2 + \cdots + w_{io}x_i + \cdots + w_{n_xo}x_{n_x} yo=w1ox1+w2ox2+⋯+wioxi+⋯+wnxoxnx
上式可以改造成矩阵乘法的形式:
y o = x ⃗ w o ⃗ T y_o=\vec{x} \vec{w_o}^T yo=xwoT
其中 w o ⃗ = [ w 1 o , w 2 o , ⋯ , w i o , ⋯ , w n x o ] \vec{w_o}=[w_{1o}, w_{2o}, \cdots, w_{io}, \cdots, w_{n_xo}] wo=[w1o,w2o,⋯,wio,⋯,wnxo]
如果我们将所有权重组合起来形成权重矩阵 W W W:
W = [ w 11 w 12 ⋯ w 1 n y w 21 w 22 ⋯ w 2 n y ⋮ ⋮ ⋱ ⋮ w n x 1 x n x 2 ⋯ w n x n y ] W=\begin{bmatrix} w_{11} & w_{12} & \cdots & w_{1n_y} \\ w_{21} & w_{22} & \cdots & w_{2n_y} \\ \vdots & \vdots & \ddots & \vdots \\ w_{n_x1} & x_{n_x2} & \cdots & w_{n_xn_y} \end{bmatrix} W=⎣⎢⎢⎢⎡w11w21⋮wnx1w12w22⋮xnx2⋯⋯⋱⋯w1nyw2ny⋮wnxny⎦⎥⎥⎥⎤
权重矩阵 W W W 每个列向量即 w o ⃗ T \vec{w_o}^T woT:
W = [ w 1 ⃗ T , w 2 ⃗ T , ⋯ , w o ⃗ T , ⋯ , w n y ⃗ T ] T W=[\vec{w_1}^T, \vec{w_2}^T, \cdots, \vec{w_o}^T, \cdots, \vec{w_{n_y}}^T]^T W=[w1T,w2T,⋯,woT,⋯,wnyT]T
由此,输出向量 y ⃗ \vec{y} y 可以表示为:
y ⃗ = x ⃗ W \vec{y}=\vec{x}W y=xW
如果输入全连接层的是一个矩阵 X X X,维度为 m x × n x m_x×n_x mx×nx,表示 m x m_x mx个 n x n_x nx维向量:
X = [ x 11 x 12 ⋯ x 1 n x x 21 x 22 ⋯ x 2 n x ⋮ ⋮ ⋱ ⋮ x m x 1 x m x 2 ⋯ x m x n x ] X=\begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1n_x} \\ x_{21} & x_{22} & \cdots & x_{2n_x} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m_x1} & x_{m_x2} & \cdots & x_{m_xn_x} \end{bmatrix} X=⎣⎢⎢⎢⎡x11x21⋮xmx1x12x22⋮xmx2⋯⋯⋱⋯x1nxx2nx⋮xmxnx⎦⎥⎥⎥⎤
X X X的每个行向量 x r ⃗ \vec{x_r} xr为:
x r ⃗ = [ x r 1 , x r 2 , ⋯ , x r i , ⋯ , x r n x ] \vec{x_r}=[x_{r1} , x_{r2} ,\cdots ,x_{ri} ,\cdots ,x_{rn_x}] xr=[xr1,xr2,⋯,xri,⋯,xrnx]
现在需要将矩阵 X X X 的每个行向量的维数从n_x转化为n_y维,行向量的个数不变,输出矩阵 Y Y Y。矩阵 Y Y Y 维度记作 m y × n y m_y×n_y my×ny。
Y = [ y 11 y 12 ⋯ y 1 n y y 21 y 22 ⋯ y 2 n y ⋮ ⋮ ⋱ ⋮ y m y 1 x m y 2 ⋯ y m y n y ] Y=\begin{bmatrix} y_{11} & y_{12} & \cdots & y_{1n_y} \\ y_{21} & y_{22} & \cdots & y_{2n_y} \\ \vdots & \vdots & \ddots & \vdots \\ y_{m_y1} & x_{m_y2} & \cdots & y_{m_yn_y} \end{bmatrix} Y=⎣⎢⎢⎢⎡y11y21⋮ymy1y12y22⋮xmy2⋯⋯⋱⋯y1nyy2ny⋮ymyny⎦⎥⎥⎥⎤
其中 m x = m y m_x=m_y mx=my,下文中我们统一记作 m m m
Y Y Y 的每个行向量 y r ⃗ \vec{y_r} yr 为:
y r ⃗ = [ y r 1 , y r 2 , ⋯ , y r i , ⋯ , y r n y ] \vec{y_r}=[y_{r1} , y_{r2} ,\cdots ,y_{ri} ,\cdots ,y_{rn_y}] yr=[yr1,yr2,⋯,yri,⋯,yrny]
同样的,我们将矩阵 X X X 乘上全连接网络的权重矩阵 W W W 即可得到矩阵 Y Y Y:
Y = X W Y=XW Y=XW
上面的公式具备一般性,但难免有些让人困惑。我们可以使用一个简单的具体案例加以说明。假设现有一个输入矩阵 X X X:
X = [ 1 2 3 4 2 3 4 5 3 4 5 6 ] X=\begin{bmatrix} 1 & 2 & 3 & 4 \\ 2 & 3 & 4 & 5 \\ 3 & 4 & 5 & 6 \end{bmatrix} X=⎣⎡123234345456⎦⎤
矩阵 X X X 由三个4维向量组成。现在想将其转化为三个2维向量,需要准备一个4×2的全连接网络,且权重已定,如图5-2所示。
其权重矩阵为
W = [ 1 1 0 1 1 0.5 0.5 1 ] W=\begin{bmatrix} 1 & 1 \\ 0 & 1 \\ 1 & 0.5 \\ 0.5 & 1 \\ \end{bmatrix} W=⎣⎢⎢⎡1010.5110.51⎦⎥⎥⎤
则矩阵 X X X 经过该全连接层输出 矩阵 Y Y Y 的矩阵计算过程如下:
Y = X W = [ 1 2 3 4 2 3 4 5 3 4 5 6 ] [ 1 1 0 1 1 0.5 0.5 1 ] = [ 1 ∗ 1 + 0 ∗ 2 + 1 ∗ 3 + 0.5 ∗ 4 1 ∗ 1 + 1 ∗ 2 + 0.5 ∗ 3 + 1 ∗ 4 1 ∗ 2 + 0 ∗ 3 + 1 ∗ 4 + 0.5 ∗ 5 1 ∗ 2 + 1 ∗ 3 + 0.5 ∗ 4 + 1 ∗ 5 1 ∗ 3 + 0 ∗ 4 + 1 ∗ 5 + 0.5 ∗ 6 1 ∗ 3 + 1 ∗ 4 + 0.5 ∗ 5 + 1 ∗ 6 ] = [ 6 8.5 8.5 12 11 15.5 ] \begin{aligned} Y=XW&=\begin{bmatrix} 1 & 2 & 3 & 4 \\ 2 & 3 & 4 & 5 \\ 3 & 4 & 5 & 6 \end{bmatrix} \begin{bmatrix} 1 & 1 \\ 0 & 1 \\ 1 & 0.5 \\ 0.5 & 1 \\ \end{bmatrix} \\ &=\begin{bmatrix} 1*1+0*2+1*3+0.5*4 & 1*1+1*2+0.5*3+1*4 \\ 1*2+0*3+1*4+0.5*5 & 1*2+1*3+0.5*4+1*5 \\ 1*3+0*4+1*5+0.5*6 & 1*3+1*4+0.5*5+1*6 \end{bmatrix} \\ &=\begin{bmatrix} 6 & 8.5 \\ 8.5 & 12 \\ 11 & 15.5 \end{bmatrix} \end{aligned} Y=XW=⎣⎡123234345456⎦⎤⎣⎢⎢⎡1010.5110.51⎦⎥⎥⎤=⎣⎡1∗1+0∗2+1∗3+0.5∗41∗2+0∗3+1∗4+0.5∗51∗3+0∗4+1∗5+0.5∗61∗1+1∗2+0.5∗3+1∗41∗2+1∗3+0.5∗4+1∗51∗3+1∗4+0.5∗5+1∗6⎦⎤=⎣⎡68.5118.51215.5⎦⎤
这样输入X的三个4维向量就被转化为了三个2维向量,从而达到改变矩阵形状的作用。在此输出为2维向量,如果我们需要对输入向量进行二分类的话,输出结果的每个元素对应一种分类的值,如果将较大的数值对应的索引表示分类结果,就将输入的“分布式特征表示”映射到了样本标注空间。这就是利用全连接网络的降维能力实现了分类器的功能。
5.2 Dropout层
全连接网络中的参数数量为输入维度乘以输出维度,拟合能力拉满。当训练模型较大而训练数据很少的时候,很容易引起过拟合。深度学习之父Hinton在2012提出,每次训练的时候随机让一定数量的神经元停止工作,可以提高网络的泛化能力,这样的操作叫作Dropout。
如图5-3,在全连接网络前加入Dropout层,该网络的输入神经元会按照设定的比例随机失活。
深度学习训练过程中,按照一定的概率将神经网络训练单元从网络中暂时移除(注意是暂时),由于是随机丢弃,每一次mini-batch都在训练不同的网络。所以对于相同的网络、相同的训练数据,含有Dropout层的神经网络每次的输出都会有差异。
5.3 mini-batch
pass
5.4 典型激活函数
pass
5.5 典型优化器
pass
参考文献
- 《深度学习入门:基于Python的理论与实现》斋藤康毅著,陆宇杰译。