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进行训练
相关文章推荐
- HDU1260 Tickets
- 该怎么关掉EDIUS中的自动保存功能
- mybatic详细基础介绍,并介绍spring mvc + mybatic
- 获得各类指针、句柄
- 游标+bulk collect into limit的不同方法查询数据
- 第十四天、二分查找
- 产品经理定义需求优先级的四种方法
- rtmp与hls流媒体服务器搭建:ubuntu下Nginx搭建初探与rtmp-module的添加
- android多线程学习---Android Looper和Handler分析
- (学习笔记3)BMP位图的读取与显示
- sql 行转列
- php使用正则验证中文
- xcode git 忽略user interface state文件
- Spring的IntializingBean和Init-method的应用
- 关于Android Studio加载.so文件问题,亲测有效
- myeclipse中的可视化图形界面
- 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
- Go语言中的<断言>
- 如何使用java合并多个文件
- MyBatis:由数据库自动生成实体类