深度学习
对于深度学习,大部分未接触的人都处于模糊的阶段。每次说到这块,都会联想到机器统治人类。觉得高大上,并且里面的逻辑晦涩难懂。但其实,他没有我们想象中的高大上,也没有我们想象里的那么难。我们离所谓的机器人统治革命其实还差得远。因此,本文会简化深度学习各类的模型和尽量使用通俗的指代和描述,旨在以简单直观的方式进行表达。普及并解决下面一些疑问:到底什么是深度学习?深度学习和机器学习有什么不同?深度学习要解决哪些问题。深度学习中的激励函数,损失函数作用是什么等等问题。
如果你对此产生了兴趣,不妨往下阅读, 进行更深入的了解。
image.png深度学习的由来
说的这个问题,我们不得不聊一下深度学习的历史。可以说深度学习 = 神经网络 + 机器学习
,从另一种角度来说他的发展也十分有趣。
深度学习的本源其实就是神经网络的在机器学习中的应用。他是机器学习的子集。
他起源于1980年福岛邦彦提出的感知机。但因计算代价过大, 训练时间过长。导致未能进行实际的应用。并且神经网络这个名词, 可能因为和生物相关, 投资者们都认为赚不了钱。研究的经费也有所减少。自此,神经网络在机器学习的应用如打入冷宫,一直不温不火。但深度学习的萌芽已经种下。只等随着科技的研究与发展,在未来进行一轮革命性的爆发。
经过一段漫长的沉寂与暗中生长。2006年,Geoffrey Hinton等人在Science杂志上发表Deep Belief Networks的文章。为了能更好的骗经费, 忽悠信徒。率先使用了“深度”这个词。重新激活了神经网络的研究,开启了深度神经网络的新时代。
自此, 学术界和工业界对深度学习热情高涨,并逐渐在语音识别、图像识别、自然语言处理等领域获得突破性进展。深度学习在语音识别领域获得相对20%到30%的准确率提升,突破了近十年的瓶颈。2012年图像识别领域在ImageNet图像分类竞赛中取得了85%的top5准确率 ,相比前一年74%的准确率有里程碑式的提升,并进一步在2013年获得89%的准确率。事实证明, 改名字真的能改变命运!
什么是人工神经网络?
在了解深度学习前,我们不得不先说明什么是神经网络。神经网络准确来说是被命名为 人工神经网络。他旨在用数学的方法,模拟我们细胞中的神经元反应。处理解决实际中的问题。
人工神经网络与反射弧
让我们来复习复习初中的知识,神经反射是如何产生的。他的组成部分有哪些? 神经反射源于反射弧。简单来分它由:感受器, 神经中枢, 效应器三部分组成。
肌肉受到刺激,感受器向中枢神经发送兴奋。通过中枢神经的阈值判断强度,引起效应器进行响应。肌肉马上对刺激做出应激反应,收缩肌肉。
image.png神经兴奋与阀值
并非所有
刺激
(兴奋
) 都可以引起细胞的的应激反应
。就像轻风拂过和, 针刺钉扎的区别。细胞的反应取决于刺激的程度。而决定这一现象的因数被称为阀值
。只有总刺激度超过细胞阀值时,细胞才会做出反应。
神经的兴奋与反应阀值
但刺激的来源往往不是单一的。他的组成要素可能有很多,因此他更类似于如下模型。刺激的来源可能不只一种。并且每种来源的兴奋,对中枢神经的刺激程度也不一样。就像我们在玩真心话大冒险时,被逼喝下一碗混合 蜜糖
,酱油
混辣椒
的崂山神水。甜,咸,辣每种味道对舌根的刺激都是不同的。如果是吃不得辣的广东人喝了估计就要被辣出翔。而被湖南人吃了,只觉得是甜到腻。
因此,每种刺激对中枢神经的说都有不同的权重。假设三种味觉分别a1, a2, a3。他们的权重即为w1, w2, w3。可得一个神经元的刺激总和 z 为:
image.png 如果刺激从 3 种延伸到 k 种可得:
image.png 为了更具有普遍性,一般会在末尾带上常熟变量b, 我们就得到了单个神经元神经网络最基本的通项公式。
一个神经元的刺激 = 每种刺激 x 每种刺激对应的权重
, 即:
但总所周知, 我们人处理事物时, 往往不是一个而是多个神经元决定的。就如我们辨认人的声音,可能会有音色,尖细(频率), 大小 多个阀值决定
。因此继续推导,假设我们判断事物需要有 j 个神经元参与。分别为z1, z2, z3 … zj-1, zj。可得每个神经元的通项公式:
而我们决断的最终结果就等于他们的总合。即把z1 … zj求和。一个简单事物的判断 = 多个神经元的总刺激
, 他便变成了我们刚一直觉得看似晦涩难懂的公式:
机器学习的分类
说完神经网络,将该说机器学习了。学习的分类一般分为三种: 有监督学习
和 无监督学习
, 半监督式学习
。他们的关系也非常直观。
训练机器就正如养孩子。所谓的无监督学习就是把孩子散养。让熊孩子们自己去耍,从不干预。让他自己去区分和理解事物。直到某一天认为他们认知够了,就查看他们价值观是否符合自己的期望。如果符合就把他送去做苦力,不符合就悄悄把他干掉, 再重新养一个 (丧心病狂! = = )。
期间没有人为干涉,不需要给机器定制目标, 标识出我们需要的特征。而是通过某些特征的距离算法
,让他们自己把具有相似性的事物归类在一块,没有经过专门的学习(所谓的社会大学毕业生)。就如把孩子放在宠物堆中,通过接触猫狗小动物。孩子们很容易就能够区分他们是两种类型的事物。但只是没有经过人为的教导,并不知道其中一类命名为 “狗”,而另一类命名为 “猫” 而已。
但无监督算法的缺点也非常明显,便是分离结果只能通过特征的表象。因为缺少家长人为的干预与监督,“孩子” 们并不知道家长的期望是怎么样的。他也没有基本的伦理道德,很容易就走歪了。并且事物的归类标准并不单一。万物互联,所有事物都具有相似性。我们也很难说哪些是正确的。如下图,长发的狗和人虽为同一物种。但无监督学习很可能就把他们分为同一类别,虽说从某种角度来说也是有一定正确性。但对人的参考性就没那么大了。因此,无监督学习普遍识别率并不高。多用于数据预处理。面对于数据量巨大,不好人为提取的抽象特征的数据集。
image那么有监督学习是怎么样的呢。不妨先让我们看看下面这个耳熟能详的实验。
image研究人员为了揭示了传统是如何形成的。五只猴子被关进笼子里,笼子一角挂着一串香蕉,如果有猴子试图摘取香蕉,就会被开水泼到。猴子们吃了几次苦头之后,就再也不想摘香蕉了。
此时用一只新猴子替换老猴子,新猴子看到有香蕉刚想去摘,就被老猴子们拉住一顿暴打。新猴子挨了几次打之后,也不再去摘香蕉了。
此时再换进一只新猴子,它也看到香蕉想去摘,也被老猴子们一顿暴打,下手最狠的恰恰是那一只没被开水烫到过的。
最后老猴子们都被换干净了,仍然没有猴子去碰那串香蕉,因为它们知道——碰香蕉意味着被打,而为什么会被打,没有猴子知道。
这个实验非常有趣,体现了有监督学习的最大优势。能够对机器制定目标。 就像上文中的猴子一样,让他们的行为都按照我们期望的方向发展。最后能优秀的为我们所用。
有监督学习与无监督学习相反。都是些每天望子成龙虎爸虎妈,天天监督孩子学习。不是就是兴趣组就是补习班。就怕你以后考不到个好学校。我们会人为的给数据打上标签,并给出指标,给孩子们直接指出名为 “正确” 的答案。经过这一系列的应试教育,孩子成绩不好也难。因此有监督学习的识别率普遍比无监督高许多。某些算法在 MNIST 数据集的正确率上都已经高达92%, 93%了。
看起来非常的好啊。只要经过不断的训练和学习,便能一朝飞上枝头,光宗耀祖。但这样你就too young了,这样训练的目的性太强。 容易制造精致的利己主义者。应试教育培养出来的考试机器,并不能应付现实中多变的场景。往往容易问题稍微的偏离考试大纲他就马上懵逼(过拟合
情况)。并且现在家长们 (开发者) 的生存压力也大,哪有时间一步步给他标出 特征
来学习。
因此有监督学习多用于有明确结果的数据有限的集合,这样能得到更准确的数据模型。同时能更为节省训练哈飞的周期。
针对于上述两种学习方式, 都有其优点与不足。因此,提出了第三种学习方式——半监督试学习。半监督学习把无监督学习和有监督学习相结合。在孩子幼年期,进行手把手教育,标注出有用特征。给他传授基本的伦理与社会道德。而剩下的数据则让他在已有的基本道德与准则下自我学习与发展。因此半监督学习会有小部分已标注的训练集用于初始化学习,而留下一大部分未标注的训练数据让其自我学习。
深度学习
深度学习中的 “深度”
从上面的层层推到, 我们很容易就能理解人工神经网络公式由来。那么他和深度又有什么关系呢。“深度
” 一词到底是深在哪里?单层的神经网络为什么就不能叫深度学习?
虽然我在上文中很不地道的揣测了 Geoffrey Hinton 改变神经网络命名用以骗经费的意图, 但深度学习的深度一词的提出,确实是有确切含义的。非常明显,深度
一词自然是与浅度
相对应的。而单层的神经网络,就是所谓的 “浅层学习”。
如下图,他只有简单的单层细胞结构,包含:刺激 输入层
(有N个则表示他的识别特征或刺激有N种),一层的神经元 隐式层
(蓝色),反应 输出层
(绿色,同时有两个圈则表示输出结果有两种)。而深度学习与浅层学习最大的区别在于神经元的层数,他的结果是通过过逐级深化的形式进行判断的。
就像我们识别一个人其实也是通过模糊到具体, 从面部轮廓,眼睛大小,发色,第二性征(性别),等多个维度去判断的。每个神经元的阀值判断,在宏观上都会表现为区分事物的一个 特征
(后文特征即指代为上图隐层每个判断的神经元)。因此每一层的神经元相当于一个特征组。而通过多个特征组一步步判断识别事物便是 深度学习。
那么,深度学习为什么能更优于浅层学习呢。其实是和我们大脑辨别事物的方式类似的。深度学习多层的结构更利于提取模糊特征。从轮廓到细节一步步去判定。这样有两个好处。一是慢慢深入,结果自然准确。二是比起单层的结构,前期能有效的筛选出有用的数据集。
如我们要辨别出人的四类分类:长发女生,长发男生,短发女生,短发男生。单层的神经网络需要对等的判断4类情况。即每个样本要进行4次判断。而在实际中短发女生的数量较少,长发男生更是占男生总数不到10%。不应该为每种情况平均的分配资源
。
而深度网络可以先提取 头发长度 作为一层神经元的筛选。如果恰好筛选出为长发。那么在筛选出来的集合里,我们已经可以大概率的认为这个样本90%的概率是为女性了。
深度学习中的 “学习”
从前文,我们可以了解到 深度学习 = 神经网络 + 机器学习
。那么深度学习又是怎么学习的呢?神经网络是从生命科学发展而来。因此,深度的学习方式也与细胞体一致。细胞会通过细胞负反馈来学习。如下图血压的负反馈调节。控制部分会通过感受器获取现在的血压指标。如果过低则指令提高血压。反之则降低血压。深度学习的优化学习算法于此原理相同。他会通过衡量当前数值与期望值偏差数值。反向调控自己的敏感度(梯度下降法
,见后文),改变刺激的权重(上文w1,w2,w3…wk)。从而达到负反馈调节的目的。那么,在深度学习中我们该怎么衡量指标的偏差值呢。
深度学习中的误差衡量——损失函数
在深度学习中,衡量实际与期望差误的函数称为损失函数(或 代价函数 ),两种几乎可以认为是完全一样,只是在不同层面的叫法。那么回想我们的高中知识, 当我们计算线性回归的拟合函数时。是怎么计算他的误差的呢?没错,就是最简单的平方误差
函数 (注意不是 平方差
函数, 一字之别, 差之千里) 。平方误差的公式等于平方误差 = (当前期望值 - 实际值) 的平方总和
:
在线性回归问题中,我们只要让平方误差 L 降低,就能提高我们最后结果的正确率。并且平方误差越低,正确率越高。至于原因,可能下图两条数据拟合线段的误差
能更为直观的阐述。
由公式不难看出,平方误差的总和,就等于黄色小球到拟合函数的垂直距离平方总和。所以,平方误差函数越小,数据坐标点就越近似拟合函数,拟合度就越高。右图的拟合函数明显优于左图。因此深度学习中误差衡量也使用了平方误差
函数。
可能在这之中你会有个疑问, 为什么误差衡量要使用
平方误差
而不使用均方误差
呢。原因在于平方形式对大误差的惩罚会更大。为了得到更好的拟合度,误差的惩罚并非线性了。而是以凸函数的形式单向增长。误差会以平方的形式放大。这样误差越大,纠正(学习)的力度也会倍增。使误差更尖锐和明显,加快学习的能力。
另外, 常见的损失函数有: 。各类互有优劣,但我认为平法差能更好地理解。
既然已经有了 神经网络模拟函数 和 衡量误差的平方差函数。那么,要让神经网络学习起来,我们就只剩下最后一个问题了。怎么让神经网络进行反馈与自我学习。
权重的自我学习——梯度下降法
所谓自我学习,其实只是找到损失函数最小值的一个过程。但实际上因硬件限制许多方程我们无法找到全局最优解。因此机器学习中我们的算法都是寻求局部最优解
的一个过程。而在计算机中,求解的过程特别适合于 迭代算法
,就相当于计算机的学习过程。
那么,我们要怎么去找到损失函数的局部最优解呢。从大学数学的理论中,很容易得出。局部最小值便是函数的极值点,准确来说是极小值点。并且,当函数为凸函数是,极小值点便是最小值点。否则则为局部最小值点。这点我就不予证明了。所以深度学习的学习算法中最大的问题就是怎么找到这些极值点了。
最自然的想法,当然是求导拉。连续函数中,导函数为0的点即为极值点。使方程倒数为0就能够得出所有极值的横坐标x。再通过比较 y 轴的值大小。不就能找出最小值了吗?但是,实际上。前文也说道,这样的方程我们现在的计算机并一定能解出他的解。并且数据量过于巨大,也太花费时间,而方程的解也不一定是有穷的。这样问题就相当大了。又该如何得到损失函数的局部最优解呢?
这里最常见的便是使用一种迭代法——梯度下降法
。
我们来模拟一个场景:
假如你到了一座陌生小山上,并且不认识路, 你只能看到周围的环境, 你要怎么能保证下山的速度最快呢?
image最直观的想法便是 —— 向坡度向下的地方走便是了!既然不认识路。我们只要朝坡度向下的地方行进,自然而然的就能朝山下去了。机器学习也同理。我们只要朝向下斜率的地方前进便是了。
但是一个问题随之出现。山体是凹凸不平的。我们这样走很容易只是到了一个山沟沟里,而不能真正的找到下山的路。这也是这种算法的弊端,梯度下降法到达的只能是一个局部最优点。
image正如上图所示一般。 我们再山体不同的地方出发,朝下走去。到达的可能是不一样的极小值点。并且他到达的是哪个极小值点取决于他的初始位置。并且很有可能我们会错过最小值点。
原理我们知道了,我们要怎么把上面的想法映射成算法呢。便是我们的反向梯度。我们对损失函数当前位置求导。如果导函数为正则,减去当前的梯度。如果导函数为负则加上他的梯度。以达到局部最小值。如下图所示:
image小球在左侧, 梯度小于0,这时候减去他的斜率(梯度),则向右运动。在右侧类似。经过不断迭代,当斜率为0时小球停下。则得到此时的局部最优解。
这时候我们就能得出神经网络权重的新公式, 权重W = 当前值 - 损失函数L对当前权重w求导
这样我们所有的特征权重都会根据当前平方误差而变化迭代,直到到达局部最优解。
为了能更好的控制梯度下降的速度,我们为公式添加一个常量系数α, 称之为学习率。此时,公式便变成:
image.png既然α是个常熟, 在公式中有什么用呢。他又该设成多大呢?α称之为学习率。在我们上述例子中,就相当于我们迈的步子的步长。步子迈的大,下山便下得快。但在接近最低点时,容易因为步子太大而在最低的左右移动,而无法到达。而如果步子迈的太小,则下山速度过于缓慢。不能达到我们对时间的要求。因此学习率的设定没有一个具体数值。需要具体问题具体分析。即使是同一个模型,学习率不同。最后得出的模型的识别率也会相差很大。下图是学习率设置的不同的三个值。如果设的太大(红线),结果一直徘徊在最低点附近。但设的太小(蓝线),需要学习的时间就会太长。而合理的值(黄线),既能到达局部最优处,也能快速的完成训练。
image.png深度学习最基本的几个环节都已经进行说明了。但如果是有相关学习的朋友是不是觉得少了什么?激励函数到哪去了?
深度学习中的非线性因素——激励函数
其实激励函数又称激活函数。上文的深度学习虽已经有了最基本的组成。但是要到达高学习率这些仅仅是不够的。上述的模型中有一个很大的缺点:就是所有函数都是线性的,他不能很好的拟合某些边界场景。什么意思呢?
其实就如下图所示,添加激活函数后,边界从直线变成了圆滑曲线,不再那么分明。
image image其实激活函数的作用就是用来加入非线性因素的,因为线性模型的表达能力不够。
我们用线性的线段去逼近一条曲线的时候,边角过于规则。有一种“跃迁”的感觉。因此,我们必须引入非线性的元素。让他的边界不那么棱角分明,而能适用于更多情况。我就不进行公式推导了。可以参考知乎回答
文章参考:
什么是无监督学习?
神经网络激励函数的作用是什么?有没有形象的解释?
网易公开课 - 斯坦福大学公开课 :机器学习课程
谷歌机器学习课程
Deep Learning Tutorial-李宏毅
网友评论