神经网络与深度学习
(Michael Nielsen)
\text{(Michael Nielsen)}
(Michael Nielsen)笔记(一)
1. 感知器工作原理
![图片名称](https://i-blog.csdnimg.cn/blog_migrate/5249e83bbcfdbd7d76e7afc3a202378d.png)
一个感知器接受几个二进制输入,
x
1
,
x
2
,
…
x_{1}, x_{2}, \dots
x1,x2,…,并产生一个二进制输出。上图中,感知器有三个输入
x
1
,
x
2
,
x
3
x_{1}, x_{2}, x_{3}
x1,x2,x3。通常可以更多或更少。引入权重
w
1
,
w
2
,
…
w_{1}, w_{2}, \dots
w1,w2,…,表示相应输入对输出重要性的实数。神经元的输出
0
0
0或
1
1
1,由分配权重后的总和
∑
j
w
j
x
j
\sum_{j} w_{j} x_{j}
∑jwjxj小于或大于一些阈值决定。和权重一样,阈值是一个实数,也是神经元的一个参数。更精确的代数形式:
output
=
{
0
if
∑
j
w
j
x
j
≤
threshold
1
if
∑
j
w
j
x
j
>
threshold
\text { output }=\left\{\begin{array}{ll}{0} & {\text { if } \sum_{j} w_{j} x_{j} \leq \text { threshold }} \\ {1} & {\text { if } \sum_{j} w_{j} x_{j}>\text { threshold }}\end{array}\right.
output ={01 if ∑jwjxj≤ threshold if ∑jwjxj> threshold
2.
S
S
S型神经元
S
S
S型函数:
σ
(
z
)
≡
1
1
+
e
−
z
\sigma(z) \equiv \frac{1}{1+e^{-z}}
σ(z)≡1+e−z1
S
S
S神经元对每个输入权重
w
1
,
w
2
,
…
w_{1}, w_{2}, \dots
w1,w2,…,和一个总的偏置
b
b
b,输出不再是
0
0
0或
1
1
1,而是
σ
(
w
⋅
x
+
b
)
\sigma(w \cdot x+b)
σ(w⋅x+b)一个具有输入
x
1
,
x
2
,
…
x_{1}, x_{2}, \dots
x1,x2,…,权重
w
1
,
w
2
,
…
w_{1}, w_{2}, \dots
w1,w2,…,偏置
b
b
b的
S
S
S型神经元的输出是:
1
1
+
exp
(
−
∑
j
w
j
x
j
−
b
)
\frac{1}{1+\exp \left(-\sum_{j} w_{j} x_{j}-b\right)}
1+exp(−∑jwjxj−b)1
S
S
S型函数图像:
![图片名称](https://i-blog.csdnimg.cn/blog_migrate/8d69e79c5f62d7f7e4309434f6da0b25.png)
σ \sigma σ的平滑意味着权重和偏置的微小变化,即 Δ w j \Delta w_{j} Δwj和 Δ b \Delta b Δb,会从神经元产生一个微小的输出变化 Δ output \Delta \text{{output}} Δoutput,微积分上 Δ output \Delta \text{{output}} Δoutput可以近似表示为 Δ output ≈ ∑ j ∂ output ∂ w j Δ w j + ∂ output ∂ b Δ b \Delta \text { output } \approx \sum_{j} \frac{\partial \text { output }}{\partial w_{j}} \Delta w_{j}+\frac{\partial \text { output }}{\partial b} \Delta b Δ output ≈j∑∂wj∂ output Δwj+∂b∂ output Δb3. 神经网络架构:输入层,输入神经元、隐藏层、输出层,输出神经元
![图片名称](https://i-blog.csdnimg.cn/blog_migrate/2de8682fc8ec5e650d9ccd4d6f797a68.png)
4. 使用梯度下降法进行学习
代价函数:
C
(
w
,
b
)
≡
1
2
n
∑
x
∥
y
(
x
)
−
a
∥
2
C(w, b) \equiv \frac{1}{2 n} \sum_{x}\|y(x)-a\|^{2}
C(w,b)≡2n1x∑∥y(x)−a∥2这里
w
w
w表示所有的网络权重的集合,
b
b
b是所有的偏置,
n
n
n是训练输入数据的个数,
a
a
a表示当输入为
x
x
x时输出的向量,求和是在总的训练输入
x
x
x上进行的。把称为二次代价函数,有时也称为均方误差或者
MSE
\text{MSE}
MSE
在
v
1
v_1
v1和
v
2
v_2
v2方向上移动很小的量,即
Δ
v
1
\Delta v1
Δv1和
Δ
v
2
\Delta v2
Δv2,
C
C
C将会有如下变化:
Δ
C
≈
∂
C
∂
v
1
Δ
v
1
+
∂
C
∂
v
2
Δ
v
2
\Delta C \approx \frac{\partial C}{\partial v_{1}} \Delta v_{1}+\frac{\partial C}{\partial v_{2}} \Delta v_{2}
ΔC≈∂v1∂CΔv1+∂v2∂CΔv2我们要寻找一种选择
v
1
v_1
v1和
v
2
v_2
v2的方法使得
Δ
C
\Delta C
ΔC为负,定义
Δ
v
\Delta v
Δv为
v
v
v变化的向量,
Δ
v
≡
(
Δ
v
1
,
Δ
v
2
)
T
\Delta v \equiv\left(\Delta v_{1}, \Delta v_{2}\right)^{T}
Δv≡(Δv1,Δv2)T
定义
C
C
C的梯度为偏导数的向量,
(
∂
C
∂
v
1
,
∂
C
∂
v
2
)
T
\left(\frac{\partial C}{\partial v_{1}}, \frac{\partial C}{\partial v_{2}}\right)^{T}
(∂v1∂C,∂v2∂C)T,用
∇
C
\nabla C
∇C来表示梯度向量,即:
∇
C
≡
(
∂
C
∂
v
1
,
∂
C
∂
v
2
)
T
\nabla C \equiv\left(\frac{\partial C}{\partial v_{1}}, \frac{\partial C}{\partial v_{2}}\right)^{T}
∇C≡(∂v1∂C,∂v2∂C)T这样
Δ
C
\Delta C
ΔC的表达式可以被重写为:
Δ
C
≈
∇
C
⋅
Δ
v
\Delta C \approx \nabla C \cdot \Delta v
ΔC≈∇C⋅Δv这个方程让我们看到了如何取
Δ
v
\Delta v
Δv才能让
Δ
C
\Delta C
ΔC为负数,假设选取
Δ
v
=
−
η
∇
C
\Delta v=-\eta \nabla C
Δv=−η∇C这里
η
\eta
η是个很小的正数,称为学习速率。于是有
Δ
C
≈
−
η
∇
C
⋅
∇
C
=
−
η
∥
∇
C
∥
2
\Delta C \approx-\eta \nabla C \cdot \nabla C=-\eta\|\nabla C\|^{2}
ΔC≈−η∇C⋅∇C=−η∥∇C∥2
∥
∇
C
∥
2
≥
0
\|\nabla C\|^{2} \geq 0
∥∇C∥2≥0保证了
Δ
C
≤
0
\Delta C \leq 0
ΔC≤0,按照这样的规则去改变
v
v
v,那么
C
C
C会一直减小,不会增加。因此我们可以用
Δ
v
\Delta v
Δv来移动位置
v
v
v:
v
→
v
′
=
v
−
η
∇
C
v \rightarrow v^{\prime}=v-\eta \nabla C
v→v′=v−η∇C假设
C
C
C是一个有
m
m
m个变量
v
1
,
…
,
v
m
v_{1}, \dots, v_{m}
v1,…,vm的多元函数,那么对
C
C
C中自变量的变化
Δ
v
=
(
Δ
v
1
,
…
,
Δ
v
m
)
T
\Delta v=\left(\Delta v_{1}, \ldots, \Delta v_{m}\right)^{T}
Δv=(Δv1,…,Δvm)T,
Δ
C
\Delta C
ΔC会变为:
Δ
C
≈
∇
C
⋅
Δ
v
\Delta C \approx \nabla C \cdot \Delta v
ΔC≈∇C⋅Δv,梯度
∇
C
\nabla C
∇C是向量
∇
C
≡
(
∂
C
∂
v
1
,
…
,
∂
C
∂
v
m
)
T
\nabla C \equiv\left(\frac{\partial C}{\partial v_{1}}, \dots, \frac{\partial C}{\partial v_{m}}\right)^{T}
∇C≡(∂v1∂C,…,∂vm∂C)T我们可选取
Δ
v
=
−
η
∇
C
\Delta v=-\eta \nabla C
Δv=−η∇C 使得
Δ
C
≈
∇
C
⋅
Δ
v
\Delta C \approx \nabla C \cdot \Delta v
ΔC≈∇C⋅Δv保证是负数,这给出了一种方式从梯度中去取得最小值。
神经网络中的梯度下降算法
其原理是利用梯度下降法寻找使得代价函数
C
C
C取得最小值的权重
w
k
w_{k}
wk和偏置
b
l
b_l
bl
用权重和偏置取代
v
v
v,梯度向量
∇
C
\nabla C
∇C则有相应的分量
∂
C
∂
w
k
\frac{\partial C} {\partial w_{k}}
∂wk∂C和
∂
C
∂
b
l
\frac{\partial C} {\partial b_{l}}
∂bl∂C,用这些分量来写梯度下降的更新规则,我们得到:
w
k
→
w
k
′
=
w
k
−
η
∂
C
∂
w
k
w_{k} \rightarrow w_{k}^{\prime}=w_{k}-\eta \frac{\partial C}{\partial w_{k}}
wk→wk′=wk−η∂wk∂C
b
l
→
b
l
′
=
b
l
−
η
∂
C
∂
b
l
b_{l} \rightarrow b_{l}^{\prime}=b_{l}-\eta \frac{\partial C}{\partial b_{l}}
bl→bl′=bl−η∂bl∂C随机梯度下降算法
改写
C
=
1
n
∑
x
C
x
C=\frac{1}{n} \sum_{x} C_{x}
C=n1∑xCx,
C
x
≡
∥
y
(
x
)
−
a
∥
2
2
C_{x} \equiv \frac{\|y(x)-a\|^{2}}{2}
Cx≡2∥y(x)−a∥2,在实践中,为了计算梯度
∇
C
\nabla C
∇C,我们需要为每个训练输入
x
x
x单独计算梯度值
∇
C
x
\nabla C_{x}
∇Cx,然后求平均值,
∇
C
=
1
n
∑
x
∇
C
x
\nabla C=\frac{1}{n} \sum_{x} \nabla C_{x}
∇C=n1∑x∇Cx,当训练输入的数量过大时会使得学习变得相当缓慢,而随机梯度下降算法能够加速学习,其思想时通过选取小量训练输入样本来计算
∇
C
x
\nabla C_{x}
∇Cx,进而估计梯度
∇
C
\nabla C
∇C。通过计算少量样本的平均值我们可以快速得到一个对于实际梯度
∇
C
\nabla C
∇C的很好的估算,这有助于加速学习过程。
具体地,随机梯度下降通过随机选取小量的
m
m
m个训练输入来工作。我们将这些随机色训练输入标记为
X
1
,
X
2
,
…
,
X
m
X_{1}, X_{2}, \ldots, X_{m}
X1,X2,…,Xm,并把它们称为一个小批量数据
(mini-batch)
\text{(mini-batch)}
(mini-batch),假设样本数量
m
m
m足够大,我们期望
∇
C
X
j
\nabla C_{X_{j}}
∇CXj的平均值大致相等于整个
∇
C
x
\nabla C_{x}
∇Cx的平均值,即
∑
j
=
1
m
∇
C
X
j
m
≈
∑
x
∇
C
x
n
=
∇
C
\frac{\sum_{j=1}^{m} \nabla C_{X_{j}}}{m} \approx \frac{\sum_{x} \nabla C_{x}}{n}=\nabla C
m∑j=1m∇CXj≈n∑x∇Cx=∇C即
∇
C
≈
1
m
∑
j
=
1
m
∇
C
X
j
\nabla C \approx \frac{1}{m} \sum_{j=1}^{m} \nabla C_{X_{j}}
∇C≈m1j=1∑m∇CXj
w
k
→
w
k
′
=
w
k
−
η
m
∑
j
∂
C
X
j
∂
w
k
w_{k} \rightarrow w_{k}^{\prime}=w_{k}-\frac{\eta}{m} \sum_{j} \frac{\partial C_{X_{j}}}{\partial w_{k}}
wk→wk′=wk−mηj∑∂wk∂CXj
b
l
→
b
l
′
=
b
l
−
η
m
∑
j
∂
C
X
j
∂
b
l
b_{l} \rightarrow b_{l}^{\prime}=b_{l}-\frac{\eta}{m} \sum_{j} \frac{\partial C_{X_{j}}}{\partial b_{l}}
bl→bl′=bl−mηj∑∂bl∂CXj其中求和符号是在当前小批量数据中的所有训练样本
X
j
X_{j}
Xj上进行,然后我们再挑选另一随机选定的小批量数据去训练。直到我们用完了所有的训练输入,这被称为完成了一个训练迭代期
(epoch)
\text{(epoch)}
(epoch),然后我们就会开始一个新的训练迭代期。
《 Neural Networks and Deep Learning 》 Michael Nielsen