读书笔记--Neural Networks and Deep Learning(CH1)

第一章:使用神经网络识别手写数字

1.1 感知器

20世纪五、六十年代由科学家 Frank Rosenblatt 发明,感知器是一种“人工神经元”。

这里写图片描述

上图为一个简单的感知器
输入:x1 x2 x3
权重(表⽰相应输⼊对于输出重要性的实数):w1 w2 w3
输出:0或1
阈值:和权重一样,阈值是一个实数,一个神经元的参数

用更精确的代数形式表示为下图:
这里写图片描述

为了简化感知器的数学描述,我们做两个变动。
第一个变动是把这里写图片描述改写成点乘, w · x = 这里写图片描述,这⾥ w 和 x 对应权重和输入的向量。
第⼆个变动是把阈值移到不等式的另⼀边,并用感知器的偏置 b = −threshold 代替。
这样感知器形式变为:

这里写图片描述

我们可以把偏置看作一种表示让感知器输出1(或者用生物学的术语,即激活感知器)有多容易的估算。
对于具有一个非常大偏置的感知器来说,输出1是很容易的。但是如果偏置是一个非常小的负数,输出1则很困难。
很明显,引入偏置只是我们描述感知器的一个很小的变动,但是我们后面会看到它引导更进一步的符号简化。
因此,在这本书的后续部分,我们不再用阈值,而总是使用偏置。

感知器的用途:1、一种衡量依据来做出决策的方法 2、计算基本的逻辑功能

如下图,就是感知器实现的“与非门”。输入00产生正数3,输入11产生负数-1

这里写图片描述

以此类推:实现“与门”:权重设为2,偏置设为-3。实现“或门”:权重设为2,偏置设为-1。

感知器总结:我们可以设计学习算法,能够自动调整人工神经元的权重和偏置。这种调整可以响应外部的刺激,而不需要一个程序员的直接干预。这些学习算法是我们能够以一种根本区别于传统逻辑门的方式使用人工神经元。有别于显式地设计与非或其它门,我们的神经网络能简单地学会解决问题,这些问题有时候直接用传统的电路设计是很难解决的。


1.2 S型神经元

为了看清学习是怎样工作的,假设我们把网络中的权重(或者偏置)做些微小的改动。就像我们马上会看到的,这一属性会让学习变得可能。(如下图)

这里写图片描述

如果对权重(或者偏置)的微小的改动真的能够仅仅引起输出的微小变化,那我们可以利用这一事实来修改权重和偏置,让我们的网络能够表现得像我们想要的那样。

然而:

问题在于当我们的网络包含感知器时这不会发生。实际上,网络中单个感知器上一个权重或偏置的微小改动有时候会引起那个感知器的输出完全翻转,如0变到1。那样的翻转可能接下来引起其余网络的行为以极其复杂的方式完全改变。因此,虽然你的“9”可能被正确分类,网络在其它图像上的行为很可能以一些很难控制的方式被完全改变。这使得逐步修改权重和偏置来让网络接近期望行为变得困难。也许有其它聪明的方式来解决这个问题。但是这不是显而易见地能让一个感知器网络去学习。

所以我们要引入S型神经元啦,它就是那种微小地改变权重和偏置,只引起输出的微小变化的神经元,这对学习非常重要~~~

我们用描述感知器的相同方式来描述S型神经元(如下图)

这里写图片描述

与感知器不同的是,它的输入不仅仅是0或者1,而可以是0-1之间的任意值。它的输出不再是0或1,而是被定义为这里写图片描述。这个σ函数就是S型函数(sigmoid function), 定义为:

这里写图片描述

把z替换后,即:
这里写图片描述

如下图,当z为很大的正数时,输出趋于1;当z为很大的负数时,输出趋于0

这里写图片描述
S型函数的这种平滑特性,正是关键因素。平滑意味着权重和偏置的微小变化,会从神经元产生一个微小的输出变化。即:

这里写图片描述


1.3 神经网络的架构

假设我们有这样的网络:

这里写图片描述

上图中,最左边的为输入层,最右边的为输出层(上图的输出层只有一个神经元),中间的为隐藏层。

下图的隐藏层有两层
这里写图片描述

目前为止,我们讨论的神经网络,都是以上一层的输出作为下一层的输入。这种网络被称为前馈神经网络。这意味着网络中是没有回路的,信息总是向前传播,从不反向回馈。如果确实有回路,我们最终会有这样的情况:σ函数的输入依赖于输出。这将难于理解,所以我们不允许这样的环路。

然而,也有一些人工神经网络的模型,其中反馈环路是可行的。这些模型被称为递归神经网络。这种模型的设计思想,是具有休眠前会在一段有限的时间内保持激活状态的神经元。这种激活状态可以刺激其它神经元,使其随后被激活并同样保持一段有限的时间。这样会导致更多的神经元被激活,随着时间的推移,我们得到一个级联的神经元激活系统。因为一个神经元的输出只在一段时间后而不是即刻影响它的输入,在这个模型中回路并不会引起问题。

递归神经网络比前馈网络影响力小得多,部分原因是递归网络的学习算法(至少目前为止)不够强大。但是递归网络仍然很有吸引力。它们原理上比前馈网络更接近我们大脑的实际工作。并且递归网络能解决一些重要的问题,这些问题如果仅仅用前馈网络来解决,则更加困难。然而为了篇幅,本书将专注于使用更广泛的前馈网络。


1.4 一个简单的分类手写数字的网络

我们将使用一个三层神经网络来识别单个数字:

这里写图片描述

网络的输入层包含给输入像素的值进行编码的神经元。我们给网络的训练数据会有很多扫描得到的28*28的手写数字的图像组成,所有输入层包含有784=28*28个神经元。为了简化,上图中我已经忽略了784中大部分的输入神经元。输入像素是灰度级的,值为0.0表示白色,值为1.0表示黑色,中间数值表示逐渐暗淡的灰色。

网络的第二层是一个隐藏层。我们用n来表示神经元的数量,我们将给n实验不同的数值。示例中用一个小的隐藏层来说明,仅仅包含n=15个神经元。

网络的输出层包含有10个神经元。如果第一个神经元激活,即输出 ≈1,那么表明网络认为数字是一个0。如果第二个神经元激活,就表明网络认为数字是一个1。依此类推。更确切地说,我们把输出神经元的输出赋予编号0到9,并计算出那个神经元有最高的激活值。比如,如果编号为6的神经元激活,那么我们的网络会猜到输入的数字是6。其它神经元相同。


1.5 使用梯度下降算法进行学习

数据集:MNIST数据集

MNIST 数据分为两个部分。第一部分包含 60,000 幅用于训练数据的图像。这些图像扫描自250 人的手写样本,他们中一半人是美国人口普查局的员工,一半人是高校学生。这些图像是28*28大小的灰度图像。第二部分是 10,000 幅用于测试数据的图像,同样是28*28的灰度图像。我们将用这些测试数据来评估我们的神经网络学会识别数字有多好。为了让其有好的测试表现,测试数据取自和原始训练数据不同的另外一组 250 人(尽管仍然分别是美国人口普查局和高校学生)。这有助于确保我们的系统能识别那些没有看到训练数据的人写的数字。

我们将用符号x来表示一个训练输入。为了方便,把每个训练输入x看作一个28*28 = 784维的向量。每个向量中的项目代表图像中单个像素的灰度值。我们用y = y(x)表示对应的期望输出,这里y是一个10维的向量。例如,如果有一个特定的画成6的训练图像x,那么这里写图片描述则是网络的期望输出。注意这里T是转置操作,把一个行向量转换成一个列向量。

我们希望有一个算法,能让我们找到权重和偏置,以至于网络的输出y(x)能够拟合所有的训练输入x。为了量化我们如何实现这个目标,我们定义一个代价函数(有时也称为损失函数或目标函数)。

这里写图片描述

这里w表示所有的网络中权重的集合,b是所有的偏置,n是训练输入数据的个数,a是表示当输入为x时输出的向量,求和则是在总的训练输入x上进行的。当然,输出a取决于x,w和b,但是为了保持符号的简洁性,我没有明确地指出这种依赖关系。符号||v||是指向量v的模。我们把C称为二次代价函数;有时也被称为均方误差或者MSE。

观察二次代价函数的形式我们可以看到C(w,b)是非负的,因为求和公式中的每一项都是非负的。此外,代价函数C(w,b)的值相当小,即C(w,b)≈0,精确地说,是当对于所有的训练输入x,y(x)接近于输出a时。因此如果我们的学习算法能找到合适的权重和偏置,使得C(w,b)≈0,它就能很好地工作。相反,当C(w,b)很大时就不怎么好了,那意味着对于大量地输入,y(x)与输出a相差很大。

因此我们的训练算法的目的,是最小化权重和偏置的代价函数C(w,b)。换句话说,我们想要找到一系列能让代价尽可能小的权重和偏置。我们将采用称为梯度下降算法来达到这个目的。
好了,假设我们要最小化某些函数C(v)。它可以是任意的多元实值函数,v=v1,v2,…
注意我们用v代替了w和b以强调它可能是任意的函数——我们现在先不局限于神经网络的环境。为了最小化C(v),想象C是一个只有两个变量v1和 v2的函数:

这里写图片描述

首先把我们的函数想象成一个山谷。只要瞄一眼上面的绘图就不难理解。我们想象有一个小球从山谷的斜坡滚落下来。我们的日常经验告诉我们这个球最终会滚到谷底。也许我们可以用这一想法来找到函数的最小值?我们会为一个(假想的)球体随机选择一个起始位置,然后模拟球体滚落到谷底的运动。我们可以通过计算C的导数(或者二阶导数)来简单模拟——这些导数会告诉我们山谷中局部“形状”的一切,由此知道我们的球将怎样滚动。

为了更精确地描述这个问题,让我们思考一下,当我们在v1和v2方向分别将球体移动一个很小的量,即 这里写图片描述这里写图片描述时,球体将会发生什么情况。微积分告诉我们C将会有如下变化:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值