首页 > 科技 > 扫盲贴:什么是深度学习,其工作原理是什么?

扫盲贴:什么是深度学习,其工作原理是什么?

全文共4854字,预计学习时长10分钟

摄影|Chevanon Photography 来源|Pexels



什么是深度学习?


简单来说,深度学习就是样本研究。

从最基本的概念上看,深度学习就是机器学习的一种方法,教计算机筛选输入的信息,进而对信息进行预测和分类。其观察结果可以通过图片、文字或声音的方式呈现。

深度学习的灵感来源于人脑过滤信息的方式。其初衷是通过模拟人脑运行模式来做些不一样的事情。

GIF来源:GIPHY


这是正儿八经/真实的人工神经网络。

人脑中有大约1亿个神经元。每个神经元都与另外约10万个同类相连,人类现在正试图将类似的工作原理应用到机器上。

人脑中的神经元分为胞体(body),树突(dendrites)和轴突(axon)。神经元发出的信号经由轴突和传送到下一个神经元的树突。这种信号连接被称作神经元突触(synapse)。

单个的神经元其实没多大用。但如果有很多神经元互相合作就能发挥奇效。这就是深度学习算法背后的理念!从观察中获得输入数据,再将输入数据进行筛选。这类筛选产生的输出数据就是下一层筛选的输入数据,这个过程不断进行,直到获得最后的输出信号!

神经元(结点)会收到一个或多个数据(输入值),经神经元继续传播。该神经元传递的信号就是输出信号。

读者可以将输入信号的筛选看作是自己的感官:比如说你看到、闻到或是感觉到的东西。这些是一个信号观察中独立的变量。该信息会被拆分成数字,变成电脑可以读取的二进制数据。最好给这些变量设置统一标准或格式,确保都在同一范围内。

程序员会使用很多非线性处理单位来提取、转换数据特征。每道筛选步骤都会使用上一步的输出数据作为输入数据。其获取的数据所支撑的概念分为三六九等。在这一个等级上,每层都需要学习如何将输入数据转换成更加抽象、内容更丰富的表达形式。

图片|ahmedged 来源|Pixabay


对图片来说,这就意味着输入数据可能是一个像素矩阵。第一层筛选可能为边界加密,并形成一些像素。第二层筛选可能会再加上鼻子眼睛。下一层筛选可能捕捉到图像中有人脸,如此往复。


神经元内部在发生着什么?


输入结点会按数字排序输入信息。该信息表现为激活值,其中每个神经元结点都会被赋予一个数字。数字越大,激活的程度就越深。

根据连接强度(权重)和转换函数,激活值会被传送到下一个结点。每次接收一个激活值,每个结点都会计算激活值的总和(权重总和),再根据转换函数进行编辑。接着,结点会使用激活函数。激活函数是应用于某一特定神经元的。这一步之后,神经元就知道它要不要再继续传播这个信号。

每个神经元突触都会被赋予一定的权重,这一步对人工神经网络(ANNs, Artificial Neural Networks)至关重要。人工神经网络通过调整权重来决定信号传播的程度。程序员在调试自己的网络时,如何调整权重这一决定权就握在自己手里。

整个激活过程贯穿整个网络,直到它突破输出结点。输出结点会以人类可理解的方式给出信息。程序员的设计的网络会使用成本函数对输出值和预计输出值进行对比,并对模型的表现进行评估,表示为真实值和预测值之间的差异。针对各自网络的具体错误,有不同类型的成本函数可供选择。程序员要尽量减少使用损失函数。从本质上讲,损失函数得出的值越低,得到的结果就越接近预期值。获得信息反馈后,神经网络会通过调整权重的方式学习尽可能少使用损失函数的方法。这个过程叫做反向传播。

在前向传播中,信息进入输入层,通过网络传播以获取输出值,将这个值和预期结果进行对比。接着计算错误,再使信息反向传播。这样做既能训练网络,又能更新权重。得益于算法设计,程序员可以通过反向传播的方式实现同时调整所有权重。这样如果出现任何错误,就能找到是网络的哪部分在负责。

将权重调整到最优级别,我们进入下一步测试阶段。

图|Yogendra Singh 图源|Pexels


人工神经网络是如何学习的呢?


想让程序按你的意愿行事,有两种方法。第一种是硬植程序(hard-programmed)。直接告诉程序你想让它为你做什么。第二种就是神经网络。给它输入信息以及期待的输出信息,让它自己去学习。

让网络自己学习就省去了输入规则这个步骤。一旦网络训练成熟,给它一张图片就能轻松区分输出信息。


前馈和反馈网络


前馈网络包括输入数据、输出数据以及隐藏的筛选层。信号只能单向传播(向前)。输入数据经过不断进行计算的筛选层,每个处理元素都根据输入数据的权重总和来进行运算,其结果就变为新的输入数据进入到下一个筛选层(前馈)。前馈网络常用于数据挖掘中。

如循环神经网络之类的反馈网络有反馈通道。这意味着信号能通过循环进行双向传播。所有神经元都可以随意进行连接。因为循环的参与,这种类型的神经网络变为一种非线性的动态系统,不断变化直到达到一种平衡。网络为互相连接的各个元素寻找最佳安排方案时,通常用反馈网络来找到问题的最优解。


什么是加权和?


神经元的输入数据可以是一组数据特征,也可以是上一个筛选层里神经元的输出数据。每两个神经元之间有一种特殊的突触,并有其特殊的权重。若数据要从一个神经元传输到另一个神经元,必须要经过突触,给“过路费”(权重)。对于突触传来的输入数据,神经元会应用激活函数到加权和,并将计算结果传输到下一层的神经元。在谈论在一个网络中更新权重时,通常是指在突触环节调整权重。

神经元的输入数据是上一个筛选层所有神经元产出的调整权重后的输出数据。与当前神经元相连接的突触会有权重,每个输入数据会与之相乘。如果上一个神经元有三个输入数据或神经元,当前筛选层的每一个神经元就会有三个不同的权重:每个突触都有不一样的权重。

长话短说,一个结点的激活函数决定该结点的输出数据。

激活函数(或转换函数)将输入数据转换成输出数据,在一定范围内映射输出数据,比如0到1或者-1到1。在细胞里,激活函数通常被看作动作电位发放率的抽象形式。其数字代表了神经元发射的可能性。简而言之,这个函数是二元的,只有是(神经元会发射),或否(神经元不会发射)两种情况。输出数据要么是0或者1(代表开或关,是或否),要么是范围内的任何值。如果图像中的物体是一只猫,定义在0到1之间,比如说,输出数据是0.9就代表有90%的几率证明图像中的物体是一只猫。

如何选择?有很多激活函数,下文举四个常用例子:


阀函数(Threshold Function)


这是一个阶梯函数。如果输入数据的总和达到阀值,该函数结果为0。如果总和大于等于0,那么函数结果为1。阀函数的结果非常客观,只有是非之分。

例:阀函数



双弯曲函数(Sigmoid Function)


该方程通常应用于逻辑回归。与阀函数不同的是,它是从0到1的缓慢发展。双弯曲函数在输出数据的筛选层非常实用,也广泛用于线性回归。

例:双弯曲函数


双曲线正切函数(Hyperbolic Tangent Function)


双曲线正切函数和双弯曲函数非常相似。但其不同点在于,双弯曲函数的范围是从0到1,它的值可以小于0,也就是说它的范围在-1到1之间。虽然这和人脑的工作方式不太一样,但使用双曲线正切函数来训练神经网络可以得到更好的效果。在使用双曲线函数时,神经网络有时候会突然卡住,特别是输入数据中有很多负数,输出数据接近0的时候,会扰乱网络的学习进程。

例:双曲线正切函数(tanh)


线性整流函数(Rectifier Function)


在神经网络宇宙中,这可能是最受欢迎的激活函数了。它效率最高,并且在生物学角度上也是可行的。虽然曲线上有一个节点,但节点之后的曲线是平滑并且缓慢发展的。也就是说,输出数据要么是0,要么是一定比例的“是”。线性整流函数不需要进行标准化或者其他复杂的计算。

例:线性整流函数


假如说预期值是以二进制表示的,要么是,要么否。你想使用哪个激活函数呢?

从上述例子,你可以使用阀函数或双弯曲函数。阀函数会给出“是”或“否”的反馈(对应1或0)。双曲线函数会给出“是”的可能性。

如果使用双曲线函数来决定图像是一只猫的概率,比如说,输出数据0.9就表示有90%的概率证明图像上就是一只猫。

图|minanafoto 图源|Pixabay


如何调整权重?


硬刚也不是不可以,但即便是只有5个值的输入数据和一个隐藏的筛选层,也有10⁷⁵种可能的组合方式。

世界上运算最快的超级计算机的计算时间也会超过宇宙存在的时间。


梯度下降闪亮登场


如果使用梯度下降算法,可以查看权重斜率的角度,找出正负,再顺藤摸瓜找到最佳权重,以达到全局最小值。

摄影|RANJAN SIMKHADA 图源 |Pexels


梯度下降算法能算出一个函数的最小值。就好比困在山顶的人试着下山(找到最小值),路上迷雾重重,根本看不见道,这种情况下梯度下降就能派上用场。看着陡峭的山坡,沿着坡度最大的方向继续走,可以假设这样的陡坡也不是立马就能看清楚的。幸好,有梯度下降这个工具可以帮助测量!

然而,使用这个工具时间太久了。

她想在天黑之前下山,尽可能少使用这个办法。真正的挑战是多久使用一次梯度下降函数来确保不会迷路。

在这个例子中,主人公就是算法。山坡的倾斜度就是该点所在平面的错误值。小人前进的方向就是平面错误的倾斜度。她使用了微分法来帮助自己解决问题,平面的坡度可以通过该点错误函数平方的衍生结果来进行计算。小人使用另一种测量方法之前的速度就是这个算法的学习速度。虽然这个比方不是完全恰当的,但它能让读者对梯度下降算法有一个大概了解。机器也在学习这个梯度下降算法(方向),或许模型可以采用这种方法来降低错误率。


坡度下降算法(简化版!)


坡度下降算法要求成本函数呈凸字型,但万一不是呢?


现在呢?


一般来说,梯度下降算法会限于本地最小值而不是全局最小值,导致最终的网络低于平均值。这种情况下,通常将每一行的数据输入到同样的神经网络,先看一眼权重是多少,再进行调整。这个过程叫做批量梯度下降。在随机梯度下降法中,需要逐行检查,输入进神经网络,调整权重,再换到下一行。也就是说你要一行一行地调整权重。

随机梯度下降法波动更大,这样能帮助定位全局最小值。顾名思义,样本顺序是随机的,而不是一个数据集中单独的数据组。虽然看起来可能会很慢,但实际操作起来速度很快,因为不需要把所有数据都导入内存再等所有数据一起运行。这个方法最大的优势就在于它是确定性算法。也就是说如果每次初始权重都一样,每次运行网络得到的结果都是一样的。随机梯度下降法永远都是在随机的状态下运作,也可以用体量较小的数据用梯度下降的方式来计算,在同一时间运行很多行数据,再更新权重。

程序员们提出并使用了很多改进随机梯度下降法的算法,包括隐式更新(ISDG)、动量算法、平均随机梯度下降法、自适应梯度算法(AdaGrad),均方根传播算法(RMSProp),自适应动量法(Adam),等等。

下面总结一下用随机梯度下降法训练人工神经网络的技术要点:

•随机生成权重,其值为接近0的小数字。

•将数据集的首次观察数据当作输入数据导入筛选层,保证每一个输入节点都保留数据特征。

•前向传播——从左到右,每个神经元的激活都受制于权重,在没有得到预测结果之前一直进行这个过程。

•将预测结果和实际结果相比较再对生成的错误进行评估。

•反向传播——从右到左,错误是反向传播的。权重会根据各自对错误的占比不断更新。(机器学习的速率决定更新权重的频率)。

•强化学习(重复步骤1—5,每次观察后更新权重),或者批量学习(重复步骤1—5,但完成一批数据的观察后再更新权重)。

•当整个测试数据组都通过了人工神经网络后,就能打开新世界的大门。重复上述步骤,开启更多大门吧。


留言 点赞 发个朋友圈

我们一起分享AI学习与发展的干货

如需转载,请后台留言,遵守转载规范

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/151398.html