查看原文
其他

暑期追剧学AI (4) | 人工智能关键概念“神经网络”是什么?不信看完这个视频你还不懂!

2017-08-12 大数据文摘字幕组 大数据文摘

大数据文摘作品,转载要求见文末

翻译 | Chelle 曾维新

校对| Sophie

时间轴&压制 | 毯子


后台回复“字幕组”加入我们!


人工智能中的数学概念一网打尽!欢迎来到YouTube网红小哥Siraj的系列栏目“The Math of Intelligence”,本视频是该系列的第四集,讲解神经网络背后的数学原理


本期视频时长11分钟,来不及看视频的小伙伴,可以先拉到视频下方看文字部分。

https://v.qq.com/txp/iframe/player.html?vid=g05367erpe8&width=500&height=375&auto=0

后续系列视频大数据文摘字幕组会持续跟进,陆续汉化推出。


  • 全部课表详见:

https://github.com/llSourcell/The_Math_of_Intelligence


  • 本集代码挑战:

https://github.com/llSourcell/neural_networks


嗨!我是Siraj!看完这个视频,你将理解神经网络背后基本的数学原理,我们将构建4种类型的神经网络。


你知道那种坠入爱河后看到那个特别的ta时的感觉吧?实际上它可以被描述。


用数学!


脸部的特征、单词的联想、声音的音调等,这些都是相关的变量。


我们可以用一个函数来表示这种关系,对于不同的函数我们有不同的近似模型,但人类几乎可以近似任何函数。所以,对我们的自身能力进行建模难道不合理吗?



用神经网络!它由大脑启发而来,是万能的函数逼近器,对任何函数都有学习功能。虽然硅是一种非常不同于我们头脑中“化学汤”的介质,它们仍然能够复制我们所做的很多事情,超越我们创造的其他东西。


建立初级神经网络

这在1989年得到了证实,“我们表明,任意决策区域可以任意地通过,仅具有内部单隐层和任何连续S形非线性特征的“连续型前馈神经网络来良好地近似。”


什么?看到这儿你是不是想动手打我了?


来,让我们建立一个简单的AF神经网络。给定一些输入数据X和一些相关的输出标签Y,那么就存在一个函数表示它们之间的映射。我们的目标是学习这个函数,这样我们就可以随机输入一些X值,该输入数据由一个矩阵表示,其中每行是不同的数据点,每列是它的某个特征,在本例中随机取为1和0。



那么我们如何来学习这个映射呢?想象有这样一个矩阵,每次我们将输入数据与之相乘,结果都将给出正确的输出,棒呆了对吧?这就是我们试图做的。


找到那个矩阵,那个我们试图去学习的函数的系数,我们称之为权值,然后把它初始化为一个随机值的矩阵。


最后,我们希望这个矩阵具有理想值。这个值使我们计算输入数据和矩阵之间的点积时,总能得到正确的输出值。


不过等等!


我们必须在这里加点别的东西。仅仅说这两个矩阵的乘积就是我们的输出是不够的。不,我们还需要将该输出传递给Sigmoid函数,以将结果归一化或调整为0到1之间的概率值。


因此用该矩阵乘,以我们的输入,并将结果传递给这个激活函数,就得到一个输出值,4个猜测值,每个数据点一个!


但这些猜测是错误的!

梯度下降法

我们已知真正的输出,因此让我们来计算一下预测值和实际Y值之间的差异。我们差得很远。我们知道梯度下降法可以实现线性回归,在这里也可以尝试一下!我们来计算误差对权重的偏导数,就得到了一个梯度值。


梯度下降法实际就是要寻找一个误差函数的最小值,因此让我们通过增加梯度值来调整矩阵中的值。现在我们预测的输出结果就好一点了。


让我们来重复做这件事情。我们的误差将减少每次迭代或时间步长,最终我们的网络将能够预测正确的输出标签。神经网络实际不过是一个大复合函数而已。就是说一个函数由其他函数嵌套而成。每层都是这样一个函数,把前一级函数的输出作为输入。就是这样。


更进一步的处理方法

神经网络是一个复合函数,  每圈都是一个层, 更大的下一圈层。我们使用的数据集具有线性关系,在输入和输出之间直接存在一对一的关系。



但是,假如我们使用这样一个数据集,它是在输入的组合之间具有一对一的关系呢?一种非线性关系?我们这个简单的AF神经网络就无法进行学习了。


首先需要把输入数据组合成一种新的表示,然后再使其与输出具有一对一关系,为此我们需要添加另一个层我们的第一层将用于组合输入,第二层将使用第一层的输出作为输入,并将它们映射到输出。所以我们用第一个权值矩阵乘以输入,然后用sigmoid函数将其激活,并将结果传递给下一层作为其输入。


这完全是相同的过程。输入乘权值,激活,多么押韵!(英文押韵)


当我们计算预测值时,由于有多个权值要更新,我们将递归地计算在相反方向上每一层的误差梯度。然后我们就可以单独更新每个权值。

反向传播与时间递归网络

这就是为什么梯度下降法被专用于神经网络中,我们称之为反向传播。

因为在向前传播我们的输入数据之后,我们将误差梯度反向传播来更新我们的权值。我们刚刚建立的叫做前馈神经网络。它们非常适用于任何一组输入变量,与一个或多个输出变量间的关系建模。


但如果时间在输入序列中很重要呢?我是说,如果排序很重要的话。就像我们试图预测股票价格或按顺序出现的音符一样。


那么,我们就需要将前馈网络修改成一个时间递归网络,使之可以学习一个顺序映射。


我们可以对矩阵做线性变换。完全如我所料!这一次输入值是连续的,我们仍然像之前那样随机初始化我们的权值。


同样的,将初始值乘以权重矩阵,并且用激活函数对每一层的结果进行处理,区别在于:在这一次的正向传播过程中,不单单只将序列中的每一个元素作为输入,而将上一步中隐含层的状态也作为输入之一。



这样一来, 某一时刻隐含层的状态值,是通过将这一时刻输入值乘上权重矩阵,再加上前一时刻隐含层的状态值乘以隐含层的权重矩阵,得到相应值,并通过特定函数处理这个值而得到,在这种情况下,逆向传播和前反馈网络相类似通过计算权重误差的导数来对权重值进行更新。


由于循环网络是时序模型,我们将其称作通过时间的反向传播。


博士,让我们通过时间来反向传播吧(梗:回到未来Back to the Future系列)。

自组织神经网络

但当存在未标记的数据时,神经网络仍能学习到函数吗?


当然咯,能够完成这个过程的神经网络叫做自组织神经网络,它的工作机制大有不同。


让我们来看看,依旧先对网络中的权重值进行随机初始化,并将它看做二维神经元数组。每一个神经元有一个具体的拓扑位置,并且包含与输入向量具有相同维度的权重向量。连接节点之间的线仅仅代表它们相邻,它们并不代表在之前的神经网络中经常提到的那种联系。



接着,从训练集中随机选择一个数据点,计算它与每个权重之间的欧式距离。与之最近的则是最相似的,也是最佳的匹配单元。遍历其它的节点来判断它们是否在它的半径范围内,并对它邻居节点的权重进行调整,这个过程会被重复的进行,它也是整个训练流程中的一部分。


对于每一个学习的标签,这些节点通过自组织过程形成集群,临近的节点代表它们的输入具有相似的特征,我们甚至可以将它可视化,而这也能便于我们观察这些集群。



如果我们给这些网络增加更多的层数 ,更多的数据以及更多的计算量时,这会被称为深度学习。这也是机器学习领域中研究最热的分支,虽然它们并不能解决所有问题,但是如果你有这两样东西的话, 一般都会表现很好。


总而言之 ,神经网络只是一连串的矩阵运算,不管它是什么类型,归根到底就是一个大的复合函数。由于在这些运算中会使用到非线性函数,比如说sigmoid函数。因此它们能逼近任何的线性或是非线性函数,如果数据没有标签,我们可以利用自组织神经网络来学习带标签的集群。


挑战时间

本周巫师是Hammad Shaikh。他的笔记让我记忆犹新,它阐释了如何在线性回归背景下,利用L2正则化来减少对高阶多项式的过拟合,尤其是应用在电影票房和电影评分的关系上。


第二名是Ong Ja Rui,他使用正则化的线性回归来预测气候变化对洛杉矶气温的影响,这个应用场景很厉害。


本周的编程挑战是构建你自己的自组织神经网络,详情请参见:


https://github.com/llSourcell/neural_networks


记得把你的GitHub的链接附在评论区内。请订阅我的频道来获取更多的编程视频,现在我要练习荷兰语了 !


不信看完这个视频你还不懂神经网络!不服来留言!


(@Jenny和@唱歌的蔬菜 对本文亦有贡献)


20177《顶级数据团队建设全景报告》下载


关于转载

如需转载,请在开篇显著位置注明作者和出处(转自:大数据文摘 | bigdatadigest),并在文章结尾放置大数据文摘醒目二维码。无原创标识文章请按照转载要求编辑,可直接转载,转载后请将转载链接发送给我们;有原创标识文章,请发送【文章名称-待授权公众号名称及ID】给我们申请白名单授权。未经许可的转载以及改编者,我们将依法追究其法律责任。联系邮箱:zz@bigdatadigest.cn。

志愿者介绍

回复“志愿者”加入我们


往期精彩文章

点击图片阅读

暑期追剧学AI (三) | 10分钟搞定机器学习数学思维:向量和它的朋友们

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存