添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
大力的菠菜  ·  python写rest服务_mob649e8 ...·  1 年前    · 
鼻子大的拖把  ·  OpenSAML 使用引导 IV: ...·  1 年前    · 
跑龙套的小蝌蚪  ·  Receiving Event ID 64 ...·  1 年前    · 
爱旅游的绿豆  ·  Flutter小技巧 - 掘金·  2 年前    · 

什么是神经网络呢?网上似乎 缺乏 通俗的解释。

前两天,我读到 Michael Nielsen 的开源教材 《神经网络与深度学习》 (Neural Networks and Deep Learning),意外发现里面的解释非常好懂。下面,我就按照这本书,介绍什么是神经网络。

这里我要感谢 优达学城 的赞助,本文 结尾 有他们的 《前端开发(进阶)》 课程的消息,欢迎关注。

一、感知器

历史上,科学家一直希望模拟人的大脑,造出可以思考的机器。人为什么能够思考?科学家发现,原因在于人体的神经网络。

上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3...),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。

为了简化模型,我们约定每种输入只有两种可能:1 或 0。如果所有输入都是1,表示各种条件都成立,输出就是1;如果所有输入都是0,表示条件都不成立,输出就是0。

二、感知器的例子

下面来看一个例子。城里正在举办一年一度的游戏动漫展览,小明拿不定主意,周末要不要去参观。

他决定考虑三个因素。

  • 天气:周末是否晴天?
  • 同伴:能否找到人一起去?
  • 价格:门票是否可承受?
  • 这就构成一个感知器。上面三个因素就是外部输入,最后的决定就是感知器的输出。如果三个因素都是 Yes(使用 1 表示),输出就是1(去参观);如果都是 No(使用 0 表示),输出就是0(不去参观)。

    三、权重和阈值

    看到这里,你肯定会问:如果某些因素成立,另一些因素不成立,输出是什么?比如,周末是好天气,门票也不贵,但是小明找不到同伴,他还要不要去参观呢?

    现实中,各种因素很少具有同等重要性:某些因素是决定性因素,另一些因素是次要因素。因此,可以给这些因素指定权重(weight),代表它们不同的重要性。

  • 天气:权重为8
  • 同伴:权重为4
  • 价格:权重为4
  • 上面的权重表示,天气是决定性因素,同伴和价格都是次要因素。

    如果三个因素都为1,它们乘以权重的总和就是 8 + 4 + 4 = 16。如果天气和价格因素为1,同伴因素为0,总和就变为 8 + 0 + 4 = 12。

    这时,还需要指定一个阈值(threshold)。如果总和大于阈值,感知器输出1,否则输出0。假定阈值为8,那么 12 > 8,小明决定去参观。阈值的高低代表了意愿的强烈,阈值越低就表示越想去,越高就越不想去。

    上面的决策过程,使用数学表达如下。

    上面公式中, x 表示各种外部因素, w 表示对应的权重。

    四、决策模型

    单个的感知器构成了一个简单的决策模型,已经可以拿来用了。真实世界中,实际的决策模型则要复杂得多,是由多个感知器组成的多层网络。

    上图中,底层感知器接收外部输入,做出判断以后,再发出信号,作为上层感知器的输入,直至得到最后的结果。(注意:感知器的输出依然只有一个,但是可以发送给多个目标。)

    这张图里,信号都是单向的,即下层感知器的输出总是上层感知器的输入。现实中,有可能发生循环传递,即 A 传给 B,B 传给 C,C 又传给 A,这称为 "递归神经网络" (recurrent neural network),本文不涉及。

    五、矢量化

    为了方便后面的讨论,需要对上面的模型进行一些数学处理。

  • 外部因素 x1 x2 x3 写成矢量 <x1, x2, x3> ,简写为 x
  • 权重 w1 w2 w3 也写成矢量 (w1, w2, w3) ,简写为 w
  • 定义运算 w⋅x = ∑ wx ,即 w x 的点运算,等于因素与权重的乘积之和
  • 定义 b 等于负的阈值 b = -threshold
  • 感知器模型就变成了下面这样。

    六、神经网络的运作过程

    一个神经网络的搭建,需要满足三个条件。

  • 输入和输出
  • 权重( w )和阈值( b
  • 多层感知器的结构
  • 也就是说,需要事先画出上面出现的那张图。

    其中,最困难的部分就是确定权重( w )和阈值( b )。目前为止,这两个值都是主观给出的,但现实中很难估计它们的值,必需有一种方法,可以找出答案。

    这种方法就是试错法。其他参数都不变, w (或 b )的微小变动,记作 Δw (或 Δb ),然后观察输出有什么变化。不断重复这个过程,直至得到对应最精确输出的那组 w b ,就是我们要的值。这个过程称为模型的训练。

    因此,神经网络的运作过程如下。

  • 确定输入和输出
  • 找到一种或多种算法,可以从输入得到输出
  • 找到一组已知答案的数据集,用来训练模型,估算 w b
  • 一旦新的数据产生,输入模型,就可以得到结果,同时对 w b 进行校正
  • 可以看到,整个过程需要海量计算。所以,神经网络直到最近这几年才有实用价值,而且一般的 CPU 还不行,要使用专门为机器学习定制的 GPU 来计算。

    七、神经网络的例子

    下面通过车牌自动识别的例子,来解释神经网络。

    所谓"车牌自动识别",就是高速公路的探头拍下车牌照片,计算机识别出照片里的数字。

    这个例子里面,车牌照片就是输入,车牌号码就是输出,照片的清晰度可以设置权重( w )。然后,找到一种或多种 图像比对算法 ,作为感知器。算法的得到结果是一个概率,比如75%的概率可以确定是数字 1 。这就需要设置一个阈值( b )(比如85%的可信度),低于这个门槛结果就无效。

    一组已经识别好的车牌照片,作为训练集数据,输入模型。不断调整各种参数,直至找到正确率最高的参数组合。以后拿到新照片,就可以直接给出结果了。

    八、输出的连续性

    上面的模型有一个问题没有解决,按照假设,输出只有两种结果:0和1。但是,模型要求 w b 的微小变化,会引发输出的变化。如果只输出 0 1 ,未免也太不敏感了,无法保证训练的正确性,因此必须将"输出"改造成一个连续性函数。

    这就需要进行一点简单的数学改造。

    首先,将感知器的计算结果 wx + b 记为 z

    z = wx + b

    然后,计算下面的式子,将结果记为 σ(z)

    σ(z) = 1 / (1 + e^(-z))

    这是因为如果 z 趋向正无穷 z → +∞ (表示感知器强烈匹配),那么 σ(z) → 1 ;如果 z 趋向负无穷 z → -∞ (表示感知器强烈不匹配),那么 σ(z) → 0 。也就是说,只要使用 σ(z) 当作输出结果,那么输出就会变成一个连续性函数。

    原来的输出曲线是下面这样。

    现在变成了这样。

    实际上,还可以证明 Δσ 满足下面的公式。

    Δσ Δw Δb 之间是线性关系,变化率是偏导数。这就有利于精确推算出 w b 的值了。

    (正文完)

    =============================================

    下面是推广时间。

    前端开发是 优达学城 Udacity 的纳米学位课程,分成两个级别:入门班和进阶班。今年下半年的 进阶班 ,今天(7月13日)开始报名了,感兴趣的朋友不要错过!

    本课程的重点是讲解如何应用 CSS 框架和 JavaScript 框架,做出高性能、高可用性的产品,并且使用测试工具保证代码质量。学习过程中,学员必须完成以下课堂练习。

    该课程是纳米学位课程,学员提交的每一行代码都有导师 code review,并且每周可以预约导师一对一辅导,对于提高个人能力极有帮助。

    由于有真人 code review 环节,所以招生人数有限制,本期只有200个名额,目前已经预定了67个。 点击这里 了解详情,报名从速哦。

    对比王垠的论述(http://www.yinwang.org/blog-cn/2017/04/23/ai):

    人工智能的研究者们总是喜欢抬出“神经元”一类的名词来吓人,跟你说他们的算法是受了人脑神经元工作原理的启发。注意了,“ 启发 ”是一个非常模棱两可的词,由一个东西启发得来的结果,可以跟这个东西毫不相干。比如我也可以说,Yin 语言的设计是受了九 yin 真经的启发 :P

    世界上这么多 AI 研究者,有几个真的研究过人脑,解刨过人脑,拿它做过实验,或者读过脑科学的研究成果?最后你发现,几乎没有 AI 研究者真正做过人脑或者认知科学的研究。著名的认知科学家 Douglas Hofstadter 早就在接受采访时指出,这帮所谓“AI 专家”,对人脑和意识(mind)是怎么工作的,其实完全不感兴趣,也从来没有深入研究过,却号称要实现“通用人工智能”(Artificial General Intelligence, AGI),这就是为什么 AI 直到今天都只是一个虚无的梦想。

    结合上面小明看漫展的例子,这里的阈值是一个量化小明是否去漫展的关键数字。

    我们将天气、价格和同伴这三个关键因素(X)分别赋予了不同的权重(W):8、4、4,假设条件满足那么X=1,不满足则X=0,如果三个条件都满足,那么最终得分就是8+4+4=16,否则为其他W*X的值。

    但是只凭这一个值还是无法决定小明是否要去漫展,因为缺少一个比较因素,而这个“阈值”就是比较因素:我们假设阈值为10,如果W*X>10小明去漫展,如果W*X<=10小明不去漫展。

    那么很明显这个阈值就代表了小明去漫展的欲望强度,如果阈值越低则得分越容易超过,则小明就越容易去漫展,或者相反。例如:如果阈值=2,那么天气、价格、同伴只要任意满足其中的一个条件,小明就会去漫展。

    阈值是神经网络中一个最难确定的因素之一,目前都是人工设定,然后通过大量的数据训练,通过对比阈值的变换和结果正确度的变化来确定精确的数量,因为这两个因素是密切相关的。

    @JSK:

    我觉得这位说的好,但是AI研究者不是不想研究人脑,实在是不好研究啊,你说找个活的研究还是死的研究啊,死了一点点解刨神经元研究,还是活着在脑子上插上无数管子研究呢?脑研究只要有突破,AI算个P啊,照葫芦画瓢而已。人工通用智能(这个顺序念才对)就是和人类智能达到一个原理但性能更好的地步,说的通俗一点,就是人造人。现在的人工智能还是把人类成熟的思想变成算法输入给程序,程序才工作。
    想说点别的。
    这个世界的规律不会因人的思维而改变,也不会因为机器的思维而改变,怕个鸟啊!怕孩子超过自己而不生孩子,傻不傻啊!孩子真正顶天立地的时候会在乎父母那点财产?把孩子教的愚昧无知才是自取灭亡。希望走在前面的人不要束手束脚,你做错了自会有人来惩罚你的,但是勇敢的尝试才是伟人之行。
    活在当下,活在当下,活在当下。