前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习|神经网络模型简介和梯度下降求解

深度学习|神经网络模型简介和梯度下降求解

作者头像
double
发布2018-04-02 16:09:26
1.3K0
发布2018-04-02 16:09:26
举报
文章被收录于专栏:算法channel算法channel

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!

01

回顾

上一篇总结了常用的机器学习算法,论述了为什么需要深度学习,以及一种系统地展开deep learning的学习清单,具体请参考:

为什么要有深度学习?系统学习清单

都知道深度学习地实施一般都借助神经网络模型,因此,接下来,先看一看,神经网络模型是怎么一回事。

02

神经网络模型

2.1 神经网络模型组成

一般地,神经网络模型包括输入层(input layer),隐含层(hidden layers),输出层(output layer)。

如上图所示,数据传输是从 input layer -> hidden layers -> output layer ,这种网络叫做前向传播神经网络(feedforward neural networks),在这种网络中没有环,数据传播总是前向的,从不反向,也就是说输入层会通过隐含层1,隐含层2,...,间接地影响到输出层。

有一些神经网络是特例,比如 RNN (recurrent neural networks),循环的意思是指,一个神经元的输出会影响其输入,注意,这种影响不是立即发生的,而是在一定时间之后才发生的。

2.2 小球搜寻下坡最快的例子

成本函数为 C(w,b),为了取得L的最小值,采取朝着梯度方向的逐步逼近的策略,称为梯度下降,下面再介绍下它的具体实施步骤。

如下方所示的小球,位于v1, v2 空间中,图示位置所处的成本值还是比较大的,为了逐步减小,

让小球在 v1 和 v2 方向分别移动一定距离 ,那么它移动的距离可表示为:

令,

注意,上面两个表达式都是列向量,化简后,

中间点表示为向量的点乘,

为了保证ΔC ,在任何时候为负值,设

其中,η 为学习率

这样,就能保证ΔC

在任何时候为负值 ,因为,

所以,只要对 v 做如下迭代,就能确保小球一直下降,最后直到位置达到某个阈值。

以上这个式子,就是梯度下降迭代某个自变量 v 的公式。

2.3 引出梯度下降的参数迭代公式

在求解神经网络模型中,成本函数 C(w,b) 对应的自变量为 w(所有的权重参数),b(每层的偏置项),根据上面的公式,自然地,可以得到 w 和 b 的迭代公式:

2.4 批梯度下降

通常训练集内包括的样本数比较大,这里有3种梯度下降的策略:

1. 每次迭代只使用随机的一个样本(极限情况1),这种情况下,每次修正方向以各自样本的梯度方向修正,横冲直撞,难以达到收敛。

2. 每次迭代使用所有样本(极限情况2),计算效率很低,训练一套网络会很慢。

3. 批处理(中间情况),mini-batch,每次选取一定数量的样本进行训练,能避免情况1的出现,也能在迭代效率上有所提升,在这种情况下,权重参数和偏置项用批处理表示为如下,

至此,批处理参数迭代公式推导结束。

下面正式进入,手写字数据集,用神经网络模型进行训练分类。

03

建立神经网络模型手写字识别

3.1 手写数据集背景介绍

这个数据集包括7万张手写数字的扫描图像,如下图所示,

用其中6万张来作为训练集,1万张用于测试,每张图像的像素是28 by 28 的灰色度图像,任务是自动识别手写的字是哪个数字。

3.2 建立神经网络模型

方便起见,输入层的神经元个数为 28 * 28 = 784 个,输出层为10个神经元,对应着数字 0,1,2,...,9 ,对7万张图像,其中5万张用于训练,1万张用图像验证集,剩下的1万张还是用测试。

3.3 图像分类分析

对于分类,传统的机器学习算法,比如逻辑回归,softmax分类器,决策树,随机森林,AdaBoost,GBDT,XGBoost等,都可以用来做分类,这些传统的ML算法,无一例外,都使用一种限定的模型,然后拿成本函数(又称损失函数)对模型进行参数求解。

但是,它们对图像识别,尤其是复杂背景下的图像识别,分类的效果,都没有神经网络模型好,这里对手写字数据集的分类,也是用建立一套神经网络模型,然后拿目标函数,通过梯度下降,学得所有神经元的权重参数,和每层的偏置项。

因此,可以看出神经网络模型训练用于分类任务求解的思路与传统的ML求解一致,只不过此时我们会使用神经网络模型,这一点是非常不同的。

3.4 手写字图像分类分析

手写字图像分类,用神经网络模型,如何进行,这是一个不用tensorflow训练的思路,只用到了Numpy库,这个方法实现了包括:

  • 如何拆分图像任务,
  • 建立神经网络,
  • 训练神经网络,
  • 梯度下降求解权重参数和偏置项,
  • 最终分类效果(准确度等)分析
  • 完整代码实现
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档