Neural Network
Motivation
- 使用线性融合的思想组合多个感知机:
F
(
x
)
=
sign
(
∑
t
α
t
sign
(
w
t
T
x
)
)
F(\bold x) = \operatorname{sign}(\sum_t \alpha_t \operatorname{sign}(\bold w_t^T \bold x))
F(x)=sign(∑tαtsign(wtTx))
- 两层权重 α \alpha α和 w \bold w w
- 两层符号函数
- 足够多的感知机可以提供强大的能力以及平滑的边界
- 还是有一些线性不可分的问题无法解决
- 线性不可分——再做转换?
- 多层感知器——神经网络
Neural Network Hypothesis
- 转换函数:常用
tanh
(
x
)
\tanh(x)
tanh(x)
- 模拟解决函数
- 易于已与优化
- 解决生物神经元
- tanh ( x ) = 2 θ ( 2 s ) − 1 \tanh(x) = 2 \theta(2s) - 1 tanh(x)=2θ(2s)−1
- 神经网络
- 1 ≤ l ≤ L 1 \le l \le L 1≤l≤L层
- 0 ≤ i ≤ d ( l − 1 ) 0 \le i \le d^{(l - 1)} 0≤i≤d(l−1)个输入(含偏置项)
- 1 ≤ j ≤ d ( l ) 1 \le j \le d^{(l)} 1≤j≤d(l)个输出
- 分数计算 s j ( l ) = ∑ i = 0 d ( l − 1 ) w i j ( l ) x i ( l − 1 ) s_j^{(l)} = \sum_{i = 0}^{d^{(l - 1)}} w_{ij}^{(l)} x_i^{(l - 1)} sj(l)=∑i=0d(l−1)wij(l)xi(l−1)
- 非输出层的输出-输入转化: x j ( l ) = tanh ( s j ( l ) ) x_j^{(l)} = \tanh(s_j^{(l)}) xj(l)=tanh(sj(l))
- 神经网络:反应若干层的转化模式
Neural Network Learning
- 目标:学习所有的 w i j ( l ) w_{ij}^{(l)} wij(l)以最小化 E i n ( { w i j ( l ) } ) E_{in}(\{w_{ij}^{(l)}\}) Ein({wij(l)})
- 一个隐藏层:只是对感知机的简单融合——Gradient Boosting,逐个神经元加入到隐藏层
- 多个隐藏层就不能这么做——GD?逐步误差最佳化?KaTeX parse error: Undefined control sequence: \part at position 8: \frac {\̲p̲a̲r̲t̲ ̲E}{\part w_{ij}…
- 链式求导,平方误差为例
- KaTeX parse error: Undefined control sequence: \part at position 8: \frac {\̲p̲a̲r̲t̲ ̲E}{\part w_{i1}…
- KaTeX parse error: Undefined control sequence: \part at position 8: \frac {\̲p̲a̲r̲t̲ ̲E}{\part w_{ij}…
- δ j ( l ) \delta_j^{(l)} δj(l)即从输出层累计而来的梯度,其收到下一层所有神经元的影响
- KaTeX parse error: Undefined control sequence: \part at position 25: …{(l)} = \frac {\̲p̲a̲r̲t̲ ̲E}{\part s_{j}^…
- 梯度可以逐层回传——BP算法
- BP算法(SGD):
- 随机选择一个点 n ∈ { 1 , 2 m … , N } n \in \{1, 2m \ldots, N\} n∈{1,2m…,N}
- 正向:计算所有的 x i ( l ) x_i^{(l)} xi(l)
- 反向:计算所有的 δ J ( l ) \delta_J^{(l)} δJ(l)
- 梯度下降算法: w i j ( l ) ← w i j ( l ) − η x i ( l − 1 ) δ J ( l ) w_{ij}^{(l)} \gets w_{ij}^{(l)} - \eta x_{i}^{(l - 1)}\delta_J^{(l)} wij(l)←wij(l)−ηxi(l−1)δJ(l)
- 返回最终的 g ( x ) g(x) g(x)
- SGD按照小组数据同时完成——mini-batch
Optimization and Regularization
- 对于多层神经网络,误差函数往往非凸——很难找到最优解
- GD算法往往是找到一个局部最优解
- 不同的初始权重往往会到达不同的局部最优解
- 如果初始权重很大,会导致梯度非常小——随机的小值
- 对于使用tanh函数的网络,复杂度大约为
d
V
C
=
O
(
V
D
)
d_{VC} = O(VD)
dVC=O(VD)
- V为神经元数量
- D为权重数量
- 优势:足够多的神经元可以近似任意函数
- 劣势:很容易过拟合
- 正则化:L2正则化
Ω
(
w
)
=
∑
(
w
i
j
(
l
)
)
2
\Omega(\bold w) = \sum (w_{ij}^{(l)})^2
Ω(w)=∑(wij(l))2
- 收缩权重
- 稀疏化——降低复杂度——L1正则化,但是不可微分
- 放缩版L2——所有的权重都等程度地缩小
- 改进的L2正则项 ∑ ( w i j ( l ) ) 2 1 + ( w i j ( l ) ) 2 \sum \frac {(w_{ij}^{(l)})^2}{1 + (w_{ij}^{(l)})^2} ∑1+(wij(l))2(wij(l))2
- 迭代次数
- 更多的迭代次数,有更多的权重融合可能
- 小的迭代次数可以有效降低 d V C d_{VC} dVC
- 在中途合适的位置终止迭代——提前终止
- 使用Validation决定提前终止的迭代次数