社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

一文掌握深度学习、神经网络和学习过程的历史

算法与数学之美 • 3 年前 • 377 次点击  


本质上,深度学习是一个新兴的时髦名称,衍生于一个已经存在了相当长一段时间的主题——神经网络
>>>>


从20世纪40年代开始,深度学习发展迅速,直到现在。该领域取得了巨大的成功,深度学习广泛运用于智能手机、汽车和许多其他设备。


那么,什么是神经网络,它可以做什么?


现在,一起来关注计算机科学的经典方法:

程序员设计一种算法,它对于给定的输入数据,生成输出数据。


程序员们准确地设计函数f(x)的所有逻辑:

  • y = f(x)

  • 其中x和y分别是输入数据和输出数据


但是,有时设计 f(x) 可能并不那么容易。例如,假设x是面部图像,y是通信员的名字。对于大脑来说,这项任务非常容易,而计算机算法却难以完成!


这就是深度学习和神经网络大显神通的地方。

基本原则是:放弃 f() 算法,试着模仿大脑。


那么,大脑是如何表现的?


大脑使用几个无限对 (x,y) 样本(训练集)不断训练,在这个过程中,f(x) 函数会自动形成。它不是由任何人设计的,而是从无休止的试错法提炼机制中形成的。


想想一个孩子每天看着周围熟悉的人:数十亿个快照,取自不同的位置、视角、光线条件,每次识别都要进行关联,每次都要修正和锐化自然神经网络。


人工神经网络是由大脑中的神经元和突触组成的自然神经网络模型。



典型的神经网络结构


为了保持简单,并且利用当今机器的数学和计算能力,可以将神经网络设计为一组层,每层包含节点(大脑神经元的人工对应物),其中层中的每个节点连接到下一层中的节点。



每个节点都有一个状态,通过浮点数表示,其取值范围通常介于0到1。该状态接近其最小值时,该节点被认为是非活动的(关闭),而它接近最大值时,该节点被认为是活动的(打开)。可以把它想象成一个灯泡;不严格依赖于二进制状态,但位于取值范围内的某个中间值。


每个连接都有一个权重,因此前一层中的活动节点或多或少地会影响到下一层中节点的活动(兴奋性连结),而非活动节点不会产生任何影响。


连接的权重也可以是负的,这意味着前一层中的节点(或多或少地)对下一层中的节点的不活动性(抑制性连结)产生影响。


简单来说,现在假设一个网络的子集,其中前一层中的三个节点与下一层中的节点相连结。简而言之,假设前一层中的前两个节点处于其最大激活值(1),而第三个节点处于其最小值(0)。



在上图中,前一层中的前两个节点是活动的(开),因此,它们对下一层中节点的状态有所贡献,而第三个节点是非活动的(关),因此它不会以任何方式产生影响(独立于其连结权重)。


第一个节点具有强(厚)正(绿色)连接权重,这意味着它对激活的贡献很大。第二个具有弱(薄)负(红色)连接权重;因此,它有助于抑制连接节点。

最后,得到了来自前一层的传入连接节点的所有贡献值的加权和。



其中i是节点 i 的激活状态,w ij是连接节点 i 和节点 j 的连接权重。


那么,给定加权和,如何判断下一层中的节点是否会被激活?规则真的像“总和为正即被激活,结果为负则不会”?有可能,但一般来说,这取决于你为这个节点选择哪个激活函数及阈值)。


想一想。这个最终数字可以是实数范围内的任何数字,我们需要使用它来设置更有限范围内的节点状态(假设从0到1)。然后将第一个范围映射到第二个范围,以便将任意(负数或正数)数字压缩到0到1的范围内。


sigmoid 函数是执行此任务的一个常见激活函数。



在该图中,阈值(y 值达到范围中间的 x 值,即0.5)为零,但一般来讲,它可以是任何值(负数或正数,其变化影响sigmoid向左或向右移动)。


低阈值允许使用较低的加权和激活节点,而高阈值将仅使用该和的高值确定激活。


该阈值可以通过考虑前一层中的附加虚节点来实现,其激活值恒定为 1。在这种情况下,该虚节点的连接权重可以用作阈值,并且上文提到的和公式可以被认为包括阈值本身。


最终,网络的状态由其所有权重的一组值来表示(从广义上讲,包括阈值)。


给定状态或一组权重值可能会产生不良结果或大错误,而另一个状态可能会产生良好结果,换句话说,就是小错误。


因此,在N维状态空间中移动会造成小错误或大错误。损失函数能将权重域映射到错误值的函数。在n+1空间里,人们的大脑很难想象这样的函数。但是,对于N = 2是个特殊情况。


训练神经网络包括找到最小的损失函数。为什么是最佳最小值而不是全局最小值?其实是因为这个函数通常是不可微分的,所以只能借助一些 梯度下降技术在权重域中游荡,并避免以下情况:

  • 做出太大的改变,可能你还没意识到就错过最佳最小值

  • 做出太小的改变,你可能会卡在一个不太好的局部最小值


不容易,对吧?这就是深度学习的主要问题,也解释了为什么训练阶段可能要花数小时、数天甚至数周。


这就是为什么硬件对于此任务至关重要,同时也解释了为什么经常需要暂停,考虑不同的方法和配置参数来重新开始。


现在回到网络的一般结构,这是一堆层。第一层是输入数据 (x),而最后一层是输出数据 (y)。


中间的层可以是零个、一个或多个。它们被称为隐藏层,深度学习中的“深度”一词恰好指的是网络可以有许多隐藏层,因此可能在训练期间找到更多关联输入和输出的特征。


提示:在20世纪90年代,你会听说过多层网络而不是深度网络,但这是一回事。现在,越来越清楚的是,筛选层离输入层越远(深),就能越好地捕捉抽象特征。


学习过程


在学习过程开始时,权重是随机设置的,因此第一层中的给定输入集将传送并生成随机(计算)输出数据。将实际输出数据与期望输出数据进行比较;其差异就是网络误差(损失函数)的度量。


然后,此错误用于调整生成它的连接权重,此过程从输出层开始,逐步向后移动到第一层。


调整的量可以很小,也可以很大,并且通常在称为学习率的因素中定义。


这种算法称为反向传播,并在Rumelhart,Hinton和Williams研究之后,于1986年开始流行。


记住这个名字:杰弗里·辛顿 (Geoffrey Hinton),他被誉为“深度学习的教父”,是一位孜孜不倦的科学家,为他人指引前进方向。例如,他现在正在研究一种名为胶囊神经网络 (Capsule Neural Networks) 的新范式,听起来像是该领域的另一场伟大革命!


反向传播旨在通过对训练每次集中迭代的权重进行适当的校正,来逐渐减少网络的整体误差。另外,减少误差这个步骤很困难,因为不能保证权重调整总是朝着正确的方向进行最小化。


简而言之,你戴着眼罩走来走去时,在一个n维曲面上找到一个最小值:你可以找到一个局部最小值,但永远不知道是否可以找到更小的。


如果学习率太低,则该过程可能过于缓慢,并且网络也可能停滞在局部极小值。另一方面,较高的学习率可能导致跳过全局最小值并使算法发散。


事实上,训练阶段的问题在于,错误只多不少!


现状


为什么这个领域现在取得如此巨大的成功?

主要是因为以下两个原因:

  • 训练所需的大量数据(来自智能手机、设备、物联网传感器和互联网)的可用性

  • 现代计算机的计算能力可以大大缩短训练阶段(训练阶段只有几周甚至几天的情况很常见)


想了解更多?这里有几本好书推荐:

  • 亚当•吉布森(Adam Gibson)和 乔希·帕特森(Josh Patterson)所著的《深度学习》,O’Reilly媒体出版社。

  • 莫希特·赛瓦克(Mohit Sewark)、默罕默德·礼萨·卡里姆(Md Rezaul Karim)和普拉蒂普·普贾里(Pradeep Pujari)所著的《实用卷积神经网络》, Packt出版社。


—版权声明—

来源:海豚数据科学实验室,编辑:nhyilin

仅用于学术分享,版权属于原作者。

若有侵权,请联系微信号:Eternalhui或nhyilin删除或修改!


—THE END—


文章推荐


田渊栋:博士五年总结
数学简史:现代数学的五大应用
初中物理史:以科学家名字命名的单位(强烈推荐)
终年33岁的印度数学天才,他的传奇人生让扎克伯格流泪
数学家柯尔莫哥洛夫
搞基础理论研究有什么用?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131635
 
377 次点击