第一章
一切为了数据挖掘的准备
第一章:使用神经网络识别手写数字
1.1 感知器
- 感知器:有输入x,用权重w表示相应的输入对输出的重要性,输出0或1由分配权重后的总和 ∑ w i x i \sum{w_ix_i} ∑wixi小于或大于一些阈值threshold决定。可以将感知器看作根据权重做出决定的设备。
- 设置偏置b=-threshold;wx+b <=0时输出0,wx+b > 0时输出1
- 可以用感知器来计算简单的逻辑功能
- 我们可以设计学习算法,自动调整人工神经元的权重和偏置
1.2 S型神经元
- S型神经元中,被修改为权重和偏执的微小改动只引起微小的变化。
z = w x + b z = wx + b z=wx+b
σ
(
z
)
=
1
1
+
exp
−
z
\sigma(z) = \frac{1}{1+\exp^{-z}}
σ(z)=1+exp−z1
σ
\sigma
σ有时被称为逻辑函数,新的神经元被称为逻辑神经元
- σ \sigma σ函数的平滑特性,意味着权重和偏执的微小变化会产生一个微小的输出变化。它的输出是[0,1]之间的任何实数,而不仅仅是0或1 ,可以根据输出与0.5的大小,判断“是”/“不是”的问题。
1.3 神经网络的架构
- 输入层,输入神经元
- 输出层,输出神经元
- 中间层,隐藏层
- 多层感知器/MLP:由S型神经元构成的神经网络
- 前馈神经网络:以上一层的输入作为下一层的输出。这种网络没有回路,最终的输出依赖于输入。
- 递归神经网络:有些人工神经网络的模型,反馈环路可行。设计思想:有些神经元在休眠前有限时间内被激活。这种激活状态可以刺激其它神经元在有限时间内被激活。随着时间的推移,得到一个级联的神经元激活系统。这样一个神经元的输出只在一段时间后影响它的输入,而非立即影响。
- 递归神经网络比前馈网络影响力小很多。
1.4 用梯度下降算法进行学习
1.4.1 代价函数C
C ( w , b ) = 1 2 n ∑ i n ∥ ( y ( x i ) − a ) ∥ 2 C(w,b) = \frac{1}{2n}\sum_{i}^{n} \begin{Vmatrix}(y(x_i)-a)\end{Vmatrix}^2 C(w,b)=2n1i∑n∥∥(y(xi)−a)∥∥2
- w表示所有的网络中权重的集合
- b是所有的偏置
- n是训练输入数据的个数
- a是表示当输入为x时的输出向量,a = wx + b
- 求和是在总的训练输入x上进行的
- y是x对应的实际值
- C称为二次代价函数,有时也叫均方误差,或MSE
- 训练算法的目的:找到合适的权重和偏置,最小化代价函数C(w,b)
1.4.2 梯度下降算法
- 对于C(w,b)
Δ C ≈ ∂ C ∂ w Δ w + ∂ C ∂ b Δ b \Delta{C} \approx \frac{\partial C}{\partial w} \Delta{w} + \frac{\partial C}{\partial b} \Delta{b} ΔC≈∂w∂CΔw+∂b∂CΔb - 梯度向量
∇ C = ( ∂ C ∂ w , ∂ C ∂ b ) T \nabla{C} = (\frac{\partial C}{\partial w},\frac{\partial C}{\partial b})^T ∇C=(∂w∂C,∂b∂C)T
Δ v = ( Δ w , Δ b ) T \Delta{v} = (\Delta{w},\Delta{b})^T Δv=(Δw,Δb)T
Δ C ≈ ∇ C ⋅ Δ v \Delta{C} \approx \nabla{C} \cdot \Delta{v} ΔC≈∇C⋅Δv
选取:
Δ v = − η ∇ C \Delta{v} = -\eta\nabla C Δv=−η∇C
w k → w ′ = w k − η ∂ C ∂ w k w_k \rightarrow w^ \prime = w_k - \eta\frac{\partial C}{\partial w_k} wk→w′=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 ≈ − η ∣ ∣ ∇ C ∣ ∣ 2 \Delta{C} \approx -\eta \mid\mid\nabla C\mid\mid ^2 ΔC≈−η∣∣∇C∣∣2
学习速率 η \eta η是个很小的正数 - 梯度下降算法:重复的计算梯度 ∇ C \nabla C ∇C,然后沿相反的方向移动 − η ∇ C -\eta\nabla C −η∇C,就能降低代价函数C( Δ C \Delta C ΔC< 0)
1.4.3 随机梯度下降
通过随机选取小量训练输入样本来计算 ∇ C x \nabla C_x ∇Cx,进而估算梯度 ∇ C \nabla C ∇C.通过计算少量样本的平均值,快速得到一个对实际梯度很好的估算,加速梯度下降。
- 随机选取一个小批量数据。选m个训练数据,标记为 X 1 X_1 X1, X 2 X_2 X2, X m X_m Xm
- 在当前批次数据中通过梯度下降计算权重和偏置
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_{Xj}}{\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_{Xj}}{\partial b_l} bl→bl′=bl−mηj∑∂bl∂CXj - 再挑选另一随机小批量数据训练,知道用完所有的训练输入。这被称为完成了一个训练迭代期(epoch)
1.4.4 在线/递增学习
将随机梯度下降算法中的小批量数据量设为1。即假设一个训练输入x,按照规则 w k → w k ′ = w k − η ∂ C X ∂ w k w_k \rightarrow w_k ^ \prime =w_k -\eta \frac{\partial C_{X}}{\partial w_k} wk→wk′=wk−η∂wk∂CX, b l → b l ′ = b l − η ∂ C X ∂ b l b_l \rightarrow b_l ^ \prime =b_l -\eta \frac{\partial C_{X}}{\partial b_l} bl→bl′=bl−η∂bl∂CX更新权重为偏置;再选取另一个训练输入数据,再更新权重和偏置。
1.5 实现网络分类数字
- 下一层的输入,是上一层的输出
- 输出为wx+b应用
σ
\sigma
σ函数(将函数
σ
\sigma
σ向量化)
x ′ = σ ( w x + b ) x^\prime = \sigma(wx+b) x′=σ(wx+b)
1.6 深度神经网络
一个网络把非常复杂的问题,分解为在但像素层面就能回答的简单问题。它通过一系列多层结构完成,在前面的网络中,它回答一些关于输入图像非常明确的问题,在后面的网络哟层,建立一个更加复杂和抽象的层级结构。包含这种多层结构–两层或更多隐藏层–的网络被称为深度神经网络