您好、欢迎来到现金彩票网!
当前位置:全民彩票app下载 > 感知机 >

【周末AI课堂】从感知机到深度学习(代码篇) 机器学习你会遇到

发布时间:2019-04-30 21:13 来源:未知 编辑:admin

  原标题:【周末AI课堂】从感知机到深度学习(代码篇) 机器学习你会遇到的“坑”

  很多人说,看了再多的文章,可是没有人手把手地教授,还是很难真正地入门AI。为了将AI知识体系以最简单的方式呈现给你,从这个星期开始,芯君邀请AI专业人士开设“周末学习课堂”——每周就AI学习中的一个重点问题进行深度分析,课程会分为理论篇和代码篇,理论与实操,一个都不能少!

  来,退出让你废寝忘食的游戏页面,取消只有胡吃海塞的周末聚会吧。未来你与同龄人的差异,也许就从每周末的这堂AI课开启了!

  读芯术读者交流群,请加小编微信号:zhizhizhuji。等你。后台回复“周末AI课堂”,查阅相关源代码。

  我们在上一节《从感知机到深度学习(理论篇)》中,已经知道感知机只由两层神经元组成,一层用于输入,一层用于输出,从数学上可以被表示为:

  如果我们使用了sigmoid函数作为激活函数,对比logistic回归的基本形式,很容易发现感知机与Logistic回归是一致的,从这个角度,如果对Logistic回归足够了解的话,会很轻松得出感知机无法进行非线性分类。我认为这样的理解方式是更好的,但我们会在很多地方讲授感知机无法处理非线性分类时,都会举出经典的异或(XOR)问题:

  如图,从左到右,“与”、“非”、“或”问题都是线性可分的,感知机可以很容易通过调节参数获得其决策边界,但是‘“异或“却是线性不可分的,感知机对其无能为力。

  要复现这样的结果,我们需要的样本只有四个点,以”或“问题为例,我们可以很快的将这样的图形画出来:

  我们构建一个简单的感知机,这样的感知机有三个参数,分别是两条权重和一个阈值,我们将其包装为一个类,方便我们添加后续功能:

  在这里,我们不仅定义了感知机的结构,它包括了三个参数,而且用高斯分布随机初始化参数值,注意到我并没有加上所谓的偏置,偏置和阈值可以合为一个参数,接下来我们在该类里面添加推断函数,就是所谓的向前推断:

  为了让大家更好理解感知机,注意到这里我们并没有采用减号,而是用了加法,这样只会影响BP算法的阈值的更新公式,不会有其他影响(最后训练得到的参数会由原来的正数变为负数)。阈值的参数更新,会由原来的加号变为减号,依照上一节的内容,所有参数的更新就会变为:

  为1,而在使用减号的时候则是-1。当我们的使用sigmoid作为激活函数时,需要用到sigmoid函数的一阶导数,sigmoid的导数性质比较好:

  这部分需要我们利用《理解损失函数》这一节的内容,准确理解了那一节的内容会很容易知道,虽然二分类很少使用MSE,但并非不可以使用,只是它并不具备准确率的一致性,在大多数问题上不如其他的损失函数表现优异,但在这里为了简单的阐释道理,选用MSE这样人人皆知,老少咸宜的损失函数更容易专注于感知机的实现。接着,我们继续添加反向传播算法用于训练:

  注意,我并未设置学习率,默认为1,具体学习率的设定完全可以通过迭代的过程来观察是否合理。但我们在实践过程中会发现,我们完全可以给不同的参数类型设置不同的学习率,因为它们是分开处理的。截至目前,我们已经基本实现了感知机的功能,我们先来看看感知机能否正常训练,我们迭代100次,然后观察训练误差随着迭代的变化,是否收敛:

  如图,红线为决策边界,虽然这样的决策边界可以分开,但不一定不是最好的,因为我们选用了不具备与准确率不具备一致性的MSE,可以预想到,选用合适的损失函数,会让决策边界继续得到优化,但篇幅限制,请读者自行尝试。

  如果我们想用感知机处理异或问题,根据《stacking集成和bagging集成》所学到的知识,一个简单的思路就是将两个感知机做bagging集成,把它们的输出做加权平均最为最终的结果。在本质上,我们是把原来的感知机的输出神经元作为隐层,然后两个神经元的输出乘以相应的权重系数一起进入到最后的输出神经元,也就是说,统计学习的集成方法恰恰对应着感知机隐层的出现,理解到这一点非常重要,我们在后续会不断利用前面所学到的知识。

  除了我们上述的自己手写整个过程,我们还可以利用sklearn的neural_network类来解决”或“问题,首先,我们设置一个简单的隐层(只有两个神经元)的多层感知机,观察其效果:

  如图,蓝色和红色的交界处为决策边界,看起来与我们上述的结果区别不大,说明对于这类问题,一个粗糙的感知机就可以解决。

  如图所示,与我们预想的情况一样,只是两个神经元所构成的隐层就可以很好的解决异或问题,这正是集成学习所提供给我们的理论指导。

  • 在sklearn的neural_network类提供了优化算法,SGD,Adam和LFBFGS,对于我们这篇文章所提到的问题,不能使用SGD和Adam优化算法,根据《理解梯度下降》中所学得的知识,基于随机梯度下降的办法对于少量的数据会产生非常差的结果,读者可自行尝试。

  • sklearn是一个必须要熟练掌握的机器学习库,但在深度学习中,我们会在下面的课程使用keras和tensorflow,这些工具对于深度学习的支持性和拓展性能都会更好。

http://diystuff.net/ganzhiji/102.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有