多层感知机(MLP)与神经网络结构 | 深度学习笔记

为了尽量能形成系统的体系,作为最基本的入门的知识,请参考一下之前的一篇:感知机 | 神经网络 。

上篇文章让你形成对于神经网络最感性的理解。有些看不懂的直接忽略就行,最基本的符号的记法应该要会。后面会用到这篇文章中的一些记号和用法的约定什么的之后就不再啰嗦了。

01

基本结构

看完上面给出的文章或者已经有基本概念的同学应该对于神经网络的基本结构有基本的认识了。但是上面那个还只是涉及到单层结构,并没有推广到多层结构,同时,也没有在实践中使用这种结构的经验。所以,这节的内容就是以手写体识别为例子来讲一下基本结构,和实践中的基本使用思想。

这是推广到更加复杂任务上的基础。

假设你现在已经有了神经网络的一些感性认识了,那就就看下面这幅图。

输入层(最左边),隐藏层(中间两层),和输出层(最右边),在之前列出的博客就讲过了,这里回顾一下。感受一下大概的架构。

神经网络的流程分为前向过程和反向过程。反向过程一般用于训练,后面讲,这里只讲前向过程。

还记得每个神经元上面都有对于一个输入的权值,以及一个偏置,还有一个激活函数。(不知道的话看之前列出来的博客,后面不再强调了),所以一个前向过程的流程就是input输入,然后经过第一层神经元运算(乘上权值,加上偏执,激活函数运算一次),得到输出,然后第一层的输出作为第二层的输入,运算,得到第二层的输出…..直到到输出层运算,然后得到结果。神经网络就是依靠这样一套机制来进行计算和预测的。

假如你的权值和偏置已经是被训练好了。对于一个新的输入,进行这样的过程,就能够得到一个预测。那么你就能够通过这个预测来解决一些问题了。所以有机器学习思想的话,这些概念是很容易理解的。而我们的任务就是找到权值和偏置这些参数的值,使得输出的东西让我们满意,达到我们的要求。

这里先补充一个思想:

假如我们改变了某个神经元或者某几个神经元的权值或者偏置一点点,那么该神经元的输出肯定会变得不同,这些不同最终将反应在输出上面。如上面的图所示。所以,我们可以通过合理地改变权值和偏置一点点的方式来让这个神经网络最后的结果向我们预期的结果进军(sorry,我想不到好词了)。

然后说激活函数,还是在前面的博客链接中,给了很多的激活函数类型。激活函数的选择对于神经网络的训练来说,也是很重要的,这个后面再讲到。

现代神经网络激活函数总结,可以看这篇文章:

常见激活函数总结 | 深度学习笔记2

这里先以sigmoid函数为例子,讲讲激活函数的作用。所以,你这里先暂时假设我们没得选,只有sigmoid函数。

这个时候,有没有发现对于感知机前向过程的形式很像logistic回归的形式?

那我们为什么要选择sigmoid函数呢? 我们知道一个神经元还是选择了sigmoid函数之后,他的输出为\sigma(w*x+b) ,这也就是我为什么说这个形式很像logistic回归的原因。

上面的文章里面给出过这个函数的形状,这里再贴一次。其实你肯定也很熟悉了。

这个函数变动不大,很温和。不像阈值函数那样粗暴的从0到1,这是很符合之前的那个思想的。当然这个函数还有另外一个优点,就是平滑。平滑能够使得权值和偏置非常微小的变动能够使得最终的结果也产生非常微小的变动。这才是很重要的。

写成公式,就应该是这样:

怎么理解这个公式呢?

首先在机器学习里面我们不是说过,我们的任务就是找一个函数f(w,b),然后他的输出output就是由这个函数产生。你再来看这里,这里虽然是神经网络,但是整个神经网络还是一个函数。

然后回顾一下全微分的定义:

同样可以推广到多元的形式,再看上面的那个公式就不难了吧。

这里还有一个要注意的就是,从上面公式的形式来看,\Delta output 就是\Delta w_{j}\Delta b 的一个线性函数,于是我们能够选择一个小的权值和偏置的改变,使得结果以我们期望的方式改变。

讲了这么多,现在根据一个例子来谈谈实践中是怎么设计网络的结构的,很简单,也很重要。

以MNIST手写体为例子,里面都是28x28的灰度图,假如以我们现在这么简单的网络形式,我们可以考虑把所有28x28的图片统一展开为一个一维数列(这样可能会丢掉某些位置信息,后面CNN会讲到这个),然后得到一个结构,含有784(28x28)个值。

回到网络这里来,对于输入层而言,我们可以“设定”784个单元,分别接受每一个像素的值。对于输出层而言,我们可以只设定一个神经元,用来输出这个数字是几,我们也可以设定10个神经元,分别代表0到9,然后输出这个那个数字更加有可能。

从上面看,设计输入层和输出层还是比较轻松的,但是设计隐藏层是比较难的。后面再讨论。

02

训练神经网络

这里暂时默认训练神经网络的损失函数为二次损失函数:

右边的为L-2范数,当做欧氏距离理解就行。我们的目标就是找到合适的w(权值)和偏置(b)使得这个损失函数最小。意味着网络输出的值会越来越接近真实值。

训练神经网络的方法为随机梯度下降法:

写成梯度下降的形式为:

也就是说,通过不停的迭代,找到最合适的权值和偏置,使得损失最小。这在机器学习里面是很基础的东西了。

最终,我们的任务就成了计算偏导: \frac{\partial C} {\partial w_{k}} \frac{\partial C} {\partial b_{i}} 了。

但是这里是神经网络啊,那么多层,那么多参数,传统方式怎么计算偏导?所以对于偏导的计算就是反向传播的任务了。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

机器学习(18)之支持向量机原理(三)线性不可分支持向量机与核函数

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 前言 在(机器学习(15)之支持向量...

3497
来自专栏智能算法

基础聚类算法:K-means算法

一、算法简介: 俗话说:“物以类聚,人以群分”,聚类算法不同于分类算法,对于一个 分类器 ,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一...

3335
来自专栏数据科学与人工智能

【深度学习】深度学习概述:从感知机到深度网络

近些年来,人工智能领域又活跃起来,除了传统了学术圈外,Google、Microsoft、facebook等工业界优秀企业也纷纷成立相关研究团队,并取得了很多令人...

28110
来自专栏marsggbo

Andrew Ng机器学习课程笔记--week8(K-means&PCA)

Unsupervised Learning 本周我们讲学习非监督学习算法,会学习到如下概念 聚类(clustering) PCA(Principal Comp...

1789
来自专栏AI科技大本营的专栏

数据科学家必须要掌握的5种聚类算法

编译 | AI科技大本营 参与 | 刘 畅 编辑 | 明 明 【AI科技大本营导读】聚类是一种将数据点按一定规则分群的机器学习技术。给定一组数据点,我们可...

2785
来自专栏fangyangcoder

Andrew Ng机器学习课程笔记(四)之神经网络

http://www.cnblogs.com/fydeblog/p/7365730.html

391
来自专栏计算机视觉战队

每日一学——最优化(下)

梯度计算 计算梯度有两种方法:一个是缓慢的近似方法(数值梯度法),但实现相对简单。另一个方法(分析梯度法)计算迅速,结果精确,但是实现时容易出错,且需要使用微分...

35210
来自专栏机器之心

教程 | 如何基于TensorFlow使用LSTM和CNN实现时序分类任务

选自burakhimmetoglu 作者:Tom Brander 机器之心编译 参与:蒋思源 时序数据经常出现在很多领域中,如金融、信号处理、语音识别和医药。传...

6377
来自专栏量化投资与机器学习

【量化投资策略探讨】决策树和随机森林

决策树 决策树方法(decision tree)是一种代表因子值和预测值之间的一种映射关系。从决策树的“根部”往“枝叶”方向走,每路过一个节点,都会将预测值通过...

2205
来自专栏机器之心

谷歌开发者机器学习词汇表:纵览机器学习基本词汇与概念

选自Google Developers 机器之心编译 机器之心曾开放过人工智能术语集 ,该术语库项目目前收集了人工智能领域 700 多个专业术语,但仍需要与各位...

34411

扫描关注云+社区