美文网首页我爱编程
学习深度学习——王狗蛋与小黄毛的故事

学习深度学习——王狗蛋与小黄毛的故事

作者: yanqing1 | 来源:发表于2016-12-07 11:27 被阅读128次

    王狗蛋,人如其名,傻傻的、木木的,许多时候一根筋,但对不解的事情刨根问底,朋友们都说和他在一起真是一种折磨,得随时忍受他提出来的莫名其妙的问题。不过有人也说了,这么直率的性格也免去了繁杂的人情世故,倒也活的可爱。听的多了,王狗蛋觉得蛮有道理,心底里也就接受了这样的评价。终于,有一天,他遇到了小黄毛,就是这货

    从此开启了一段奇妙的人生历程。

    王狗蛋与小黄毛初次见面是在一个冬天,双方一见如故,和煦的冬日暖洋洋的倾洒下来,王狗蛋帅气的背影旁,毛发泛着光亮的小黄毛气定神闲。

    就这样,王狗蛋带着小黄毛一起学习、工作。好景不长,一天,王狗蛋起床却没有发现小黄毛,把家里上上下下都翻遍了也没有找到,他很悲痛,从此茶饭不思。

    后来,有一位仙女姐姐听说了这件事,表示想帮助王狗蛋找到小黄毛,但小黄狗多了去了,仙女姐姐并不知道小黄毛是哪一个,只好将天底下所有小黄狗的资料发给了王狗蛋。据不完全统计,共有999999999份资料,王狗蛋按996工作制每秒查阅一份也需要999999999/(60*60*12*313)=74年,王狗蛋恐怕活不了这么长,他很忧伤,这时,有一位好心人建议他采用计算机视觉以图搜图的方式去匹配,于是,他找到了大名鼎鼎的码隆科技。

    码隆科技成立于2014年7月,是一家专注于引领深度学习与计算机视觉技术突破的人工智能公司,致力于打造全球领先的视觉决策引擎,并为企业提供国际领先、定制化的计算机视觉解决方案。

    码隆科技的工程师表示,这完全是小case,深度学习会使计算机拥有比人更细致的视觉觉察,当然,最显著的方面当然是效率,分分钟搞定。王狗蛋有点不解,计算机说白了只是个机器,怎么会有与人相似的视觉、又怎么会学习呢?

    对哦,计算机的正确打开方式难道不是喂给它一串命令,然后愉快地看它乖乖执行么?

    除了0和1啥也不认识的呆呆计算机,怎么还能像人类一样“学习”了呢?

    在讨论计算机如何学习之前,不妨先来看看我们人类是如何学习的。人类的学习按逻辑顺序可分为三个阶段:输入,整合,输出。拿牙牙学语的小孩子认识世界来说,在接触之前完全是一无所知,假如在他面前放一个苹果,那么他会用眼睛观察、用鼻子闻、用手摸、用嘴咬,用耳朵听(大人告诉他这是苹果),那么这一切都会输入到大脑里,形成一个苹果的概念。但是这个简单的概念是脆弱的,倘若又遇到一个红红的东西,那么他会迷惑或者认错,经过大量接触与反馈,他才能形成完全正确的认知,而大量的接触与反馈就是整合的过程,最后在遇到苹果时,他会毫不犹豫的说出来,便是输出。同样,学习语言等其他东西也是一样,概括来说,都要经历从积累经验到总结规律,最终灵活运用这三个阶段,大概也都算是先验的范畴。

    “人类的学习是一个人根据过往的经验,对一类问题形成某种认识或总结出一定的规律,然后利用这些知识来对新的问题下判断的过程。”

    那么,应该怎样教会计算机学习呢?

    “几十年来,很多计算机科学和应用数学界的学者们总结出了不少教会计算机的办法,它们就是各式各样的机器学习算法。它们是数据科学家们胯下的挖掘机,担负着将海量数据化腐朽为神奇的使命。机器学习是指用某些算法指导计算机利用已知数据得出适当的模型,并利用此模型对新的情境给出判断的过程。”

    机器学习里分为几类,监督学习、无监督学习、半监督学习、强化学习。

    (常用机器学习的算法:线性回归、逻辑回归、决策树、SVM、朴素贝叶斯、K最近邻算法、K均值算法、随机森林算法、降维算法、Gradient Boost 和 Adaboost 算法等。)

    知道了机器是可以学习的后,王狗蛋很开心,但是王狗蛋想知道机器到底是怎么帮他找小黄毛的。后来王狗蛋知道,这里帮他找小黄毛的是一个深度学习的模型,而深度学习是机器学习的一种,它采用了神经网络架构,原理同样是输入、整合、输出的模式,只是现在变成了输入层、隐含层、输出层。这里说到神经网络,就得了解从神经元到深度学习的关系以及神经网络模型是怎么实现的。

    人工神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多,但神经网络不是人类大脑模型。

    生物神经元远比人工神经元复杂。

    大脑中的一个单个神经元就是一个极其复杂的机器,即使在今天,我们也还不能理解它。而神经网络中的一个「神经元」只是一个极其简单的数学函数,它只能获取生物神经元复杂性中极小的一部分。所以,如果要说神经网络模拟大脑,那也只在不够精确的启发水平上是对的,但事实上人工神经网络和生物大脑没什么相似之处。——吴恩达

    那么工作原理是这样的:人工神经网络的神经元其实是从前端收集到各种讯号(类似神经的树突),然后将各个讯号根据权重加权后加总,然后透过活化函数转换成新讯号传送出去(类似神经元的轴突)。

    至于类神经网络则是将神经元串接起来,我们可以区分为输入层(表示输入变量),输出层(表示要预测的变量),而中间的隐藏层是用来增加神经元的复杂度,以便让它能够仿真更复杂的函数转换结构。每个神经元之间都有连结,其中都各自拥有权重,来处理讯号的加权。

    通过不同的权值赋予的计算,得出关键特征并输出结果,这样,所识别的部分就会有一个特别的标识码来区分其他的部分,就好比仓颉将事物用一套各异的符号标注出来,这些符号就有了特指的功能。


    说了这么多没用的,接下来就是寻找小黄毛的过程了,王狗蛋手里有所有小黄狗的图像,既然是图像识别,那么常用的途径是卷积神经网络。

    对人类来说,识别是打出生便开始学习的技能之一,对成人来说更是信手拈来,毫不费力。我们只需一眼便能快速识别我们所处的环境以及环绕在我们身边的物体。当我们看到一张图片或是环看四周的时候,无需刻意观察,多数时候也能立即描述出场景特征并标记出每一个对象。快速识别不同模式、根据早前知识进行归纳、以及适应不同的图像环境一直都是人类的专属技能,机器尚未享有。而在机器眼里,图像就是一大串数字,如果是100*100的图像,那么就有100*100*3个元素,每一个元素的值从0到255不等,所以计算机本质上看到的是一些值为0~255的数组,因而很难直接得到图像中有人或者狗这种高层语义概念,也不清楚目标出现在图像中哪个区域。图像中的目标可能出现在任何位置,目标的形态可能存在各种各样的变化,图像的背景千差万别……,这些因素导致目标检测并不是一个容易解决的任务。

    那么计算机是怎么对图像进行扫描和处理的?

    图像会历经一系列卷积层、非线性层、池化(下采样(downsampling)层和完全连接层,最终得到输出。那么到最后,输出可以是最好地描述了图像内容的一个单独分类或一组分类的概率。

    首先是卷积层

    假如原图像输入的是10*10*3的像素值数组,那么卷积的过程就像是一个规则的手电光依次照射到原始数组中,手电光叫过滤器,被照射到的区域叫感受野。

    那么这样做能得出什么结果呢,是这样,如果过滤器数组与原图像数组点乘出现一个很大的数字,就说明两数组排列规则是相似或相同的,也就是说图像是类似的。而如果所得到的结果小或者干脆为0就说明,图像的这一部分和检测器过滤器不存在对应。

    这一层的输入大体描绘了低级特征在原始图片中的位置。在此基础上再采用一组过滤器(让它通过第 2 个卷积层),输出将是表示了更高级的特征的激活映射,随着进入网络越深和经过更多卷积层后,你将得到更为复杂特征的激活映射。越深入网络,过滤器的感受野越大,意味着它们能够处理更大范围的原始输入内容(或者说它们可以对更大区域的像素空间产生反应)。

    在每一个卷积层后,通常会立即应用一个非线性层,又叫做激励层(激活层?),目的是给刚经过线性计算操作加入非线性特征,过去用双曲正切和S型函数,现在使用ReLU层,这一层把所有负激活都变为0,增加模型乃至整个神经网络的非线性特征,且不影响卷积层的感受野。

    然后是池化层,通常有最大池化、平均池化、L2-norm池化等,池化的目的在于找到特征的相对位置而且大大缩小输入卷的空间维度。最大池化原理是输出过滤器卷积计算的每个子区域中的最大数字,平均同理。

    最后部分是完全连接层,此时会输入一个N维向量,如果有 10  个数字,N 就等于 10。这个 N 维向量中的每一数字都代表某一特定类别的概率。例如,如果某一数字分类程序的结果矢量是 [0 .1 .1 .75 0 0 0 0 0 .05],则代表该图片有 10% 的概率是 1、10% 的概率是 2、75% 的概率是 3、还有 5% 的概率是 9。这里便是图像中例如腿、爪等高级特征。大体上来说,完全连接层观察高级特征和哪一分类最为吻合和拥有怎样的特定权重,因此当计算出权重与先前层之间的点积后,将得到不同分类的正确概率。

    放到王狗蛋找小黄毛的例子上来。

    首先是要确定图像所处的位置,传统目标检测方法采用了以下三步。

    但传统目标检测有两大问题:

    一个是基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;二是手工设计的特征对于多样性的变化并没有很好的鲁棒性。

    后来出现的基于Region Proposal的深度学习目标检测算法解决了这两个问题。region proposal(候选区域)预先找出图中目标可能出现的位置。但由于region proposal利用了图像中的纹理、边缘、颜色等信息,可以保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率。这大大降低了后续操作的时间复杂度,并且获取的候选窗口要比滑动窗口的质量更高(滑动窗口固定长宽比)。

    有了候选区域,剩下的工作实际就是对候选区域进行图像分类的工作(特征提取+分类)。

    比如从以下这么多小黄狗中找到狗脸(其实是从环境中抓取的,这里是搞笑的)

    抓取到狗脸后就要进行提取与分类,这里级联回归模型可以确定特征点(原谅这个我不会画)。

    然后经过一系列计算与匹配,就能找到与原来图片相似度最高或者是完全相同的图片,

    第一次图片匹配找到这么一张图片:

    我们再来看小黄毛的照片

    完全不一样好不好!看小黄毛的眼睛大大的亮晶晶,上边的那只眼睛、嘴巴小小的是什么鬼?

    出现了偏差,那么就需要进行调整,也就是神经网络的训练过程,在训练前需要对以下问题进行调节。

    第一卷积层中的滤波器是如何知道寻找边缘与曲线的?完全连接层怎么知道观察哪些激活图?每一层级的滤波器如何知道需要哪些值?

    计算机通过一个名为反向传播的训练过程来调整过滤器值(或权重),在每一个问题都做好后就要不断对反馈的结果进行调整。

    反向传播可分为四部分,分别是前向传导、损失函数、后向传导,以及权重更新。在前向传导中,选择一张 10×10×3 的数组训练图像并让它通过整个网络。接下来是反向传播的损失函数部分。梯度下降和学习速率将是重要考虑的部分。

    总的来说,前向传导、损失函数、后向传导、以及参数更新被称为一个学习周期。对每一训练图片,程序将重复固定数目的周期过程。一旦完成了最后训练样本上的参数更新,网络有望得到足够好的训练,以便层级中的权重得到正确调整。

    图1 神经网络的前馈过程

    图2 神经网络的反向误差传播过程

    图3 链式法则

    这样就能找到最相似的图片。

    虽然有如此强大的技术支持,但是遗憾的是并没有在这999999999份图中找到小黄毛,那音频呢,是不是可以通过音频的材料去找?答案是肯定的,我们目前不仅可以找出差异的音频,还能理解音频里的讲话内容,和图像处理稍不同的是,在处理自然语言文本或音频材料时,采用的是递归神经网络。

    当涉及到处理不定长序列数据(如语音,文本)时,使用递归神经网络(RNN)更加自然。不同于前馈神经网络,RNN具有内部状态,在其隐藏单元中保留了 “状态矢量”,隐式地包含了关于该序列的过去的输入信息。当RNN接受一个新的输入时,会把隐含的状态矢量同新的输入组合起来,生成依赖于整个序列的输出。

    图5 递归神经网络

    因为梯度在每个时间步可能增长也可能下降,所以在经过许多时间步的反向传播之后,梯度常常会爆炸或消失,网络的内部状态对于长远过去输入的记忆作用十分微弱。

    解决这个问题的一种方案是在网络中增加一个显式的记忆模块,增强网络对于长远过去的记忆能力。长短时记忆模型(LSTM)就是这样一类模型已被证明比常规RNN更有效,尤其是在网络中每个时间步都具有若干层的时候。

    在处理音频时发生了一件令人沮丧的事,那就是仙女姐姐给的音频格式打不开,比较尴尬。所以后来建议,可以为王狗蛋做一只与小黄毛类似的智能机器人,它可以完全做出小黄毛的样子、声音甚至习惯,要做出这样的机器人,除了以上的技术外还需要声音寻向系统,和声纹识别系统、工程技术等等。

    但王狗蛋拒绝了这个建议,他要找的是真正的小黄毛。

    王狗蛋最终没有找到他的小黄毛,他感到很悲伤,追问自己,为什么他这么执着的去寻找还是一无所获,有时候他也不晓得这么坚持的意义在哪里,也许只是习惯了????

    有一天他在街上走,路过了一家画室,在橱窗了分明看到了那个熟悉的身影,画中的小黄毛一脸鬼魅的笑容,他惊呆了,这难道不是他一直苦苦追寻的小黄毛吗!!!!

    翻山越岭,漂洋过海寻找你存在的痕迹

    转过身静下来却在角落里开出一朵花

    哦,不

    应该是

    翻山越岭,漂洋过海寻找你存在的痕迹

    转过身静下来才发现你整了容

    ......

    王狗蛋很郁闷,不过他释然了:曾经在过去的相逢也许只是梦境一般的一厢情愿,至于能再续前缘真是一件可遇而不可求的事,与其相濡以沫不如相忘于江湖。

    于是王狗蛋决定,他要带着他的故事

    浪迹天涯......

    相关文章

      网友评论

        本文标题:学习深度学习——王狗蛋与小黄毛的故事

        本文链接:https://www.haomeiwen.com/subject/vodlmttx.html