送书 | Keras深度学习你必须知道的神经网络基础

2018 年 7 月 8 日 程序人生

点击上方“程序人生”,选择“置顶公众号”

第一时间关注程序猿(媛)身边的故事


人工神经网络表示一类机器学习的模型,最初是受到了哺乳动物中央神经系统研究的启发。网络由相互连接的分层组织的神经元组成,这些神经元在达到一定条件时就会互相交换信息(专业术语是激发(fire))。最初的研究开始于20世纪50年代后期,当时引入了感知机(Perceptron)模型。感知机是一个可以实现简单操作的两层网络,并在20世纪60年代后期引入反向传播算法(backpropagation algorithm)后得到进一步扩展,用于高效的多层网络的训练。有些研究认为这些技术起源可以追溯到比通常引述的更早的时候。直到20世纪80年代,人们才对神经网络进行了大量的学术研究,那时其他更简单的方法正变得更加有用。然后,由于G.Hinton提出的快速学习算法,以及2011年前后引入GPU后使大量数值计算成为可能,开始再度出现了神经网络研究的热潮。

这些进展打开了现代深度学习的大门。深度学习是以一定数量网络层的神经元为标志的神经网络,它可以基于渐进的层级抽象学习相当复杂的模型。几年前,3~5层的网络就是深度的,而现在的深度网络已经是指100~200层。

这种渐进式抽象的学习模型,模仿了历经几百万年演化的人类大脑的视觉模型。人类大脑视觉系统由不同的层组成。我们人眼关联的大脑区域叫作初级视觉皮层V1,它位于大脑后下方。视觉皮层为多数哺乳动物所共有,它承担着感知和区分视觉定位、空间频率以及色彩等方面的基本属性和微小变化的角色。据估计,初级视觉层包含了1亿4000万个神经元,以及100亿个神经元之间的连接。V1层随后和其他视觉皮层V2、V3、V4、V5和V6连接,以进一步处理更复杂的图像信息,并识别更复杂的视觉元素,如形状、面部、动物等。这种分层组织是1亿年间无数次尝试的结果。据估计,人类大脑包含大约160亿个脑皮质神经细胞,其中10%~25%是负责视觉信息处理的。深度学习就是从人类大脑视觉系统的层次结构中获得了启发,前面的人工神经网络层负责学习图像基本信息,更深的网络层负责学习更复杂的概念。

今天的这本书《Keras深度学习实战》用当前流行的Keras框架实现了大量深度学习算法,构建了众多深度学习模型,并且介绍了深度学习在游戏等实际场合中的应用,特别是本书还介绍了当前火热的生成对抗网络(GAN)的应用。

本书涵盖了神经网络的几个主要方面,并提供了基于Keras和最小有效Python库作为深度学习计算的可运行网络实例编码,后端基于谷歌的TensorFlow或者蒙特利尔大学的Theano框架。

好的,让我们切入正题。

在本文,我们将介绍以下内容:

•  感知机

•  多层感知机

•  激活函数

•  梯度下降

•  随机梯度下降

•  反向传播算法

我们将介绍以下内容:

1.1  感知机

感知机是一个简单的算法,给定n维向量x(x1, x2, …, xn)作为输入,通常称作输入特征或者简单特征,输出为1(是)或0(否)。数学上,我们定义以下函数:

这里,w是权重向量,wx是点积(译者注:也称内积、数量积或标量积) ,

b是偏差。如果你还记得基础的几何知识,就应该知道wx+b定义了一个边界超平面,我们可以通过设置w和b的值来改变它的位置。如果x位于直线之上,则结果为正,否则为负。非常简单的算法!感知机不能表示非确定性答案。如果我们知道如何定义w和b,就能回答是(1)或否(0)。接下来我们将讨论这个训练过程。

第一个Keras代码示例

Keras的原始构造模块是模型,最简单的模型称为序贯模型,Keras的序贯模型是神经网络层的线性管道(堆栈)。以下代码段定义了一个包含12个人工神经元的单层网络,它预计有8个输入变量(也称为特征):

from keras.models import Sequential
model = Sequential()
model.add(Dense(12, input_dim=8, kernel_initializer='random_uniform'))

每个神经元可以用特定的权重进行初始化。Keras提供了几个选择,其中最常用的选择如下所示。

•  random_uniform:初始化权重为(–0.05,0.05)之间的均匀随机的微小数值。换句话说,给定区间里的任何值都可能作为权重。

•  random_normal:根据高斯分布初始化权重,平均值为0,标准差为0.05。如果你不熟悉高斯分布,可以回想一下对称钟形曲线。

•  zero:所有权重初始化为0。

完整选项列表请参考Keras官网。

1.2  多层感知机——第一个神经网络的示例

完整选项列表请参考Keras官网。在本文中,我们将定义一个多层线性网络,并将其作为本书的第一个代码示例。从历史上来看,感知机这个名称是指具有单一线性层的模型,因此,如果它有多层,我们就可以称之为多层感知机(Multilayer perceptron,MLP)。图1.1展示了一个一般的神经网络,它具有一个输入层、一个中间层和一个输出层。


图1.1


在图1.1中,第一层中的每个节点接收一个输入,并根据预设的本地决策边界值确定是否激发。 然后,第一层的输出传递给中间层,中间层再传递给由单一神经元组成的最终的输出层。有趣的是,这种分层组织似乎模仿了我们前面讨论过的人类的视觉系统。

1.2.1  感知机训练方案中的问题

让我们来考虑一个单一的神经元如何选择最佳的权重w和偏差b?理想情况下,我们想提供一组训练样本,让机器通过调整权重值和偏差值,使输出误差最小化。 为了更加的具体,我们假设有一组包含猫的图像,以及另外单独的一组不包含猫的图像。为了简单起见,假设每个神经元只考虑单个输入像素值。当计算机处理这些图像时,我们希望我们的神经元调整其权重和偏差,使得越来越少的图像被错误识别为非猫。这种方法似乎非常直观,但是它要求权重(和/或偏差)的微小变化只会在输出上产生微小变化。

如果我们有一个较大的输出增量,我们就不能进行渐进式学习(而非在所有的方向上进行尝试—这样的过程称为穷举搜索—我们不知道是否在改进)。毕竟,小孩子是一点一点学习的。不幸的是,感知机并不表现出这种一点一点学习的行为,感知机的结果是0或1,这是一个大的增量,它对学习没有帮助,如图1.2所示。

我们需要一些更平滑的东西,一个从0到1逐渐变化不间断的函数。在数学上,这意味着我们需要一个可以计算其导数的连续的函数。

图1.2



1.2.2  激活函数—sigmoid

sigmoid函数的定义如下:

如图1.3所示,当输入在(−∞,∞)的区间上变化时,位于(0,1)区间上的输出值变化很小。从数学的角度讲,该函数是连续的。典型的sigmoid函数如图1.3所示。

图1.3


神经元可以使用sigmoid来计算非线性函数σ(z=wx+b)。注意,如果z=wx+b是非常大的正值,那么e−z→0,因而σ(z)→1;而如果z=wx+b是非常大的负值,e−z→∞,因而σ(z)→0。换句话说,以sigmoid为激活函数的神经元具有和感知机类似的行为,但它的变化是渐进的,输出值如0.553 9或0.123 191非常合理。在这个意义上,sigmoid神经元可能正是我们所要的。

1.2.3  激活函数—ReLU

sigmoid并非可用于神经网络的唯一的平滑激活函数。最近,一个被称为修正线性单元(Rectified Linear Unit,ReLU)的激活函数很受欢迎,因为它可以产生非常好的实验结果。

ReLU函数简单定义为f(x)=max(0,x),这个非线性函数如图1.4所示。对于负值,函数值为零;对于正值,函数呈线性增长。

图1.4


1.2.4  激活函数

在神经网络领域,sigmoid和ReLU通常被称为激活函数。在“Keras中的不同优化器测试”一节中,我们将看到,那些通常由sigmoid和ReLU函数产生的渐进的变化,构成了开发学习算法的基本构件,这些构件通过逐渐减少网络中发生的错误,来一点一点进行调整。图1.5给出了一个使用σ激活函数的例子,其中(x1, x2, …, xm)为输入向量,(w1, w2, …, wm)为权重向量,b为偏差, 表示总和。

图1.5

Keras支持多种激活函数,完整列表请参考Keras官网。


本文摘自《Keras深度学习实战》

[意大利]安东尼奥·古利 等著

点击封面购买纸书


本书用当前流行的Keras框架实现了大量深度学习算法,构建了众多深度学习模型,并且介绍了深度学习在游戏等实际场合中的应用,特别是本书还介绍了当前火热的生成对抗网络(GAN)的应用。全书通俗易懂,强调实际案例,适合广大的机器学习从业者和爱好者入门与实践。


本期评奖规则

在本文下方留言,用30+个字符,留言说说你想要这本书的理由是什么~

我们会从留言用户中,按照留言点赞数,抽取排名在第3、14、20名的3位幸运者,送出本书。


开奖时间:7月10日当天(以当天小编开奖时看到的名次顺序为准)


- The End -

「若你有原创文章想与大家分享,欢迎投稿。」

加编辑微信ID,备注#投稿#:

程序 丨 druidlost  

小七 丨 duoshangshuang


更多精彩内容

登录查看更多
3

相关内容

感知机在机器学习中,感知机是一种二进制分类器监督学习的算法。二值分类器是一个函数,它可以决定输入是否属于某个特定的类,输入由一个数字向量表示。它是一种线性分类器,即基于线性预测函数结合一组权值和特征向量进行预测的分类算法。
【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
85+阅读 · 2020年6月28日
最新《深度学习自动驾驶》技术综述论文,28页pdf
专知会员服务
153+阅读 · 2020年6月14日
【强化学习】深度强化学习初学者指南
专知会员服务
178+阅读 · 2019年12月14日
神经网络与深度学习,复旦大学邱锡鹏老师
专知会员服务
116+阅读 · 2019年9月24日
【深度学习】深度学习的问题究竟在哪?
产业智能官
4+阅读 · 2019年8月30日
人工神经网络真的像神经元一样工作吗?
论智
9+阅读 · 2018年11月15日
深度学习必须理解的25个概念
机器学习算法与Python学习
5+阅读 · 2018年6月7日
深度学习入门必须理解这25个概念
AI100
7+阅读 · 2018年6月6日
做AI必须要知道的十种深度学习方法
AI研习社
4+阅读 · 2017年12月4日
【深度学习】做AI必须要知道的十种深度学习方法
产业智能官
19+阅读 · 2017年12月2日
干货|7步掌握基于Keras的深度学习!
全球人工智能
4+阅读 · 2017年11月14日
入门 | 一文概览深度学习中的激活函数
机器之心
7+阅读 · 2017年11月2日
【深度学习】给初学者的深度学习简介
产业智能官
8+阅读 · 2017年10月17日
Generalization and Regularization in DQN
Arxiv
6+阅读 · 2019年1月30日
Multi-task Deep Reinforcement Learning with PopArt
Arxiv
4+阅读 · 2018年9月12日
Arxiv
6+阅读 · 2018年7月9日
Arxiv
7+阅读 · 2018年6月19日
VIP会员
相关VIP内容
相关资讯
【深度学习】深度学习的问题究竟在哪?
产业智能官
4+阅读 · 2019年8月30日
人工神经网络真的像神经元一样工作吗?
论智
9+阅读 · 2018年11月15日
深度学习必须理解的25个概念
机器学习算法与Python学习
5+阅读 · 2018年6月7日
深度学习入门必须理解这25个概念
AI100
7+阅读 · 2018年6月6日
做AI必须要知道的十种深度学习方法
AI研习社
4+阅读 · 2017年12月4日
【深度学习】做AI必须要知道的十种深度学习方法
产业智能官
19+阅读 · 2017年12月2日
干货|7步掌握基于Keras的深度学习!
全球人工智能
4+阅读 · 2017年11月14日
入门 | 一文概览深度学习中的激活函数
机器之心
7+阅读 · 2017年11月2日
【深度学习】给初学者的深度学习简介
产业智能官
8+阅读 · 2017年10月17日
Top
微信扫码咨询专知VIP会员