您的位置:首页 > 其它

Stanford 机器学习-Neural Networks learning

2016-04-06 10:49 302 查看

1. Cost Function

字母含义:

nln_l表示网络的层数

LlL_l表示第l层

W(l)ijW_{ij}^{(l)}表示第l层第j单元到第l+1层第i个单元之间的连接参数

b(l)ib^{(l)}_i表示是第l+1层第i单元的偏置项

a(l)ia^{(l)}_i表示是第l层第i单元的激活值(输出值)

z(l)iz^{(l)}_i第l层i单元输入加权和(包括偏置单元)

SlS_l表示第l层的neuron个数。

- 二分类:SlS_l=1,y=0或者1

- 多分类问题 SlS_l=K, yiy_i = 1表示分到第i类;(K>2)



1.1两个cost function函数

其中前半部分是预测与真实值的距离,后半部分是用于正则化的bias项



∣w⃗ Tx⃗ +b∣∥w⃗ ∥\frac {\mid\vec w^T\vec x+b\mid} {\lVert \vec w\rVert} 任意点x⃗ \vec x到超平面(w⃗ ,b)(\vec w, b)的距离。

公式γ=2∥w⃗ ∥\gamma=\frac{2}{\|\vec w\|}表示间隔

向量机的数学模型:min(w⃗ ,b⃗ )12∗∥w⃗ ∥2min_(\vec w,\vec b) \frac{1}{2}*\|\vec w\|^2,使得yi(w⃗ Tx⃗ i+b)≥1,i=1:my_i(\vec w^T\vec x_i+b)\ge1,i=1:m。

2. Backpropagation Algorithm

我们的目的是最小化J(Θ)

下面公式中的第一项 J(W,b) 是一个均方差项。第二项是一个规则化项(也叫权重衰减项),其目的是减小权重的幅度,防止过度拟合。

权重衰减参数λ\lambda用于控制公式中两项的相对重要性。



通过forward propagation,首先算出training dataset 在神经网络上的各层输出值:

前向传播的公式:

z(l+1)=Wl⋅al+blz^{(l+1)} = W^l\cdot a^l + b^l

a(l+1)=f(z(l+1))a^{(l+1)} = f(z^{(l+1)})



根据J(W,θ)J(W,\theta)求偏导,可得出第nln_l层和第i层的δ(l)j\delta_j^{(l)},δ(l)j\delta_j^{(l)}表示实际值与网络产生的输出值的差异。

公式推导地址

对于第nln_l层:

δ(nl)i=−(yi−a(nl)i)⋅f′(z(nl)i)\delta_i^{(n_l)} = -(y_i - a_i^{(n_l)})\cdot f'(z_i^{(n_l)})

对于第l层:

δ(l)i=(∑sl+1j=1Wjiδl+1j)f′(z(l)i)\delta_i^{(l)} = (\sum_{j=1}^{s_{l+1}}W_{ji}\delta_j^{l+1})f'(z_i^{(l)})



反向传播算法可以表示为以下几个步骤:

1. 进行前馈运算,求出所有层的激活值和加权和。

2. 对于输出层,计算δ(nl)=−(y−a(nl))⋅f′(z(nl))\delta^{(n_l)} = -(y - a^{(n_l)})\cdot f'(z^{(n_l)})

3. 对于其他层,计算δ(l)=((W(l))Tδ(l+1))⋅f′(z(l))\delta^{(l)} = ({(W^{(l)})}^T\delta^{(l+1)})\cdot f'(z^{(l)})

4. 计算最终所需要的偏导数的值:

∇W(t)J(W,b;x,y)=δ(l+1)(a(l))T\nabla_{W^{(t)}}J(W,b;x,y) = \delta^{(l+1)}{(a^{(l)})}^T

∇b(t)J(W,b;x,y)=δ(l+1)\nabla_{b^{(t)}}J(W,b;x,y) = \delta^{(l+1)}

在梯度下降法一次迭代中:

1. 对于所有l,另ΔW(l):=0\Delta W^{(l):=0},Δb(l):=0\Delta b^{(l):=0}

2. 对于i=1:m

使用反向传播算法计算∇W(t)J(W,b;x,y)\nabla_{W^{(t)}}J(W,b;x,y) 和∇b(t)J(W,b;x,y)\nabla_{b^{(t)}}J(W,b;x,y)

计算ΔW(l):=ΔW(l)+∇W(t)J(W,b;x,y)\Delta W^{(l)} := \Delta W^{(l)} + \nabla_{W^{(t)}}J(W,b;x,y)

计算Δb(l):=Δb(l)+∇b(t)J(W,b;x,y)\Delta b^{(l)} := \Delta b^{(l)} + \nabla_{b^{(t)}}J(W,b;x,y)

3. 更新权重参数

W(l)=W(l)−α[(1mΔW(l))+λW(l)]W^{(l)} = W^{(l)} - \alpha[(\frac{1}{m} \Delta W^{(l)}) + \lambda W^{(l)}]

b(l)=b(l)−α[1mΔb(l)]b^{(l)} = b^{(l)} - \alpha[\frac{1}{m} \Delta b^{(l)}]

3 Backpropagation Intuition

简述了BP算法

δ分量都等于后面一层所有的δ加权和,其中权值就是参数Θ。

θ(l)j=∑k=1θ(l)kj⋅θ(l+1)k\theta_j^{(l)} = \sum_{k=1}\theta_{kj}^{(l)}\cdot\theta_k^{(l+1)}



D作为cost function对参数的求导结果:

∂∂θ(l)ij=D(l)ij\frac{\partial}{\partial\theta_{ij}^{(l)}} = D_{ij}^{(l)}

4 unrolling parameters

首先将各层向量连接到一个vector里面传入function,然后展开,并进行计算。



5 gradient checking

主要就是通过gradient checking的方式,检查我们的BP算法是否正确。





6 Random Initialization

在初始化Theta值是,不能用0来初始化,而是随机初始化。





7 Putting It Together

简单叙述了如何选取隐层的数目和每层的节点数。



训练神经网络的步骤

1. 初始化权重

2. 对所有的x(i)x^{(i)}进行forward propagation得到hθ(x(i))h_{\theta} (x^{(i)})

3. 实现cost function函数

4. 实现backprop 得到partial derivative

5. 用gradient checking来检验backprop算法是否正确,在训练前要disable

6. 通过梯度下降等算法最小化J(θ)J(\theta)

梯度下降法不能保证得到全局最优解,但一般得到的结果都会比较好

对所有的training example进行训练



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: