其他

硅谷网红从基础教深度学习中的数学,视频演示不可错过

2017-06-02 雷锋字幕组 AI研习社

Siraj Raval 作为深度学习领域的自媒体人在欧美可以说是无人不知、无人不晓。


凭借在 Youtube 上的指导视频,Siraj Raval  在全世界吸粉无数,堪称是机器学习界的网红。说他是全球范围内影响力最大的 ML 自媒体人,怕也无异议。


因此,雷锋网 AI 研习社联系到了 Siraj 本人,并获得授权将他最精华的 Youtube 视频进行字幕汉化,免费推送给大家。我们将不定期更新,敬请关注!

雷锋字幕组为大家最新译制了 Siraj 深度学习系列,从机器学习和神经网络架构类型到数据可视化、小样本学习等从基础到应用的技巧,争取带领希望掌握神经网络的神奇魔力和想成为深度学习工程师的大家伙早日入坑!哦不,走向巅峰!!


今天主要讲的内容是深度学习中的那些数学知识(文末点击阅读原文可抵达 GitHub 获取代码)。

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

(建议在 Wi-Fi 环境下观看视频,土豪随意~)


为了方便流量不足的小伙伴们在路上看,我们特意整理出了图文版:


数学帮我们定义了神经网络的规则,让我们能够从数据中挖掘更多价值。


即使没有太多数学知识,也可以开始深度学习。但是,假如你要用像 Tensorflow 这样的库构建一个通用模型去解决问题的话,掌握扎实的数学基础还是很有必要的。


深度学习主要来自三个数学分支:线性代数,统计学和微积分。Siraj 很贴心地为大家准备了三份小抄(cheatsheet):


线性代数


统计学


微积分


让我们一起复习构建深度学习模型的四步流程,并看看数学理论在这个过程中是如何应用的:

  1. 收集数据

  2. 建立模型

  3. 训练模型

  4. 测试模型

数据预处理:数据集的预处理过程中可以清洗所有的缺失值,删除不需要的特征。这些步骤不需要数学知识。但是有一步需要,那就是正规化(normalization)。这不是必须项,但它可以让模型达到收敛点。在那个点上,预测有最小的误差。当我们的预测值有一个最小误差概率,更快收敛,因此所有的值在同一尺度下运算。这个思想来自统计学。


有几个策略来正规化数据,通用的方法是最小 - 最大标准化。假如有了给定的数据,可以用下面的公式来正规化:

让这一列中的每一个值减去这列中的最小值,然后再除以这列中的最大值与最小值的差。这样,我们得到一列新的数据在 [0,1],这样我们的每个特征都在相同的尺度范围内。数据正规化后,要确定的是神经网格也认可这个公式,这就需要线性代数了。


在线性代数有 4 个协同术语:标量,向量,矩阵和张量。标量就是一个数值,向量是一个一维数值数组,矩阵是一个两维数值数组,张量是一个 N 维数值数组。因此矩阵,标量,向量都可以表示成一个张量。数据不论是图像,文本或视频,都需要转换成张量。其中 n 是特征的个数,定义成张量的维度。


让我一起用一个 3 层的前馈神经网络来预测一个二进制值输出。用我们唯一的依赖的库 Numpy,然后初始化输入数据和输出数据成矩阵形式。当数据有了合适的形式后,要开始构建深度神经网络。



深度网络有超参数(hyperparameter),即网络的高级调节器,可以定义和帮助决定一些细节比如模型跑多快,每一层多少个神经元,多少个隐藏层。另外,神经网络越复杂,就有越多的超参数。根据你对现在的问题的理解,你可以手动调整这些值,猜测可能值,观察对应的结果。在所得结果的基础上,你可以相应的调节超参数,重复迭代过程。


还有另一个策略你可以用的是随机搜索(random search)。你可以明确每个超参数的范围,然后用一个搜索算法,这些范围中给超参取值,而且这些范围是一个概率均匀分布的,即,所有的可能值以相同的概率选择重复这些过程直到找到最优的超参数。


因为这是个很简单的神经网络,只用 epochs 作为超参数。可以用概率方法来决定权值。有一个简单的方法是用小方差的正态分布随机初始化每一个权值,也就是这些权值会彼此很接近。给定我们输入的矩阵的维数,将用这个方法来创建一个(3,4)维的权矩阵。


因此,在输入层的每个结点与下一层的每一个结点都连接。连接权值是 - 1 到 1 的范围内。因为我们有三层神经网络 ,我们会初始化两个权矩阵,那下一个权值集合是一个(4,1)维的,这是我们输出层的大小。


当数据在神经网络中前向传播,每一层应用自己相应的运算数据。用一些方法转换数据,直到最终输出一个预测值。就是线性代数知识,涉及到张量。


我们将初始化一个 for 循环 60,000 迭代训练我们的网络,然后要初始化各层神经元。第一层神经元 -- 输入层,接收输入数据;下一层是计算第一层神经元和第一个权矩阵的点乘。在我们把两个矩阵乘起来的时候,像这样把每个权值和输入数据相乘,就是我们所说的点乘。


然后,非线性处理这个结果,就是输入到 sigmoid 函数,得到一个实数,而且是放缩到 0 到 1 的范围内,这些就是在第一层内做的运算。


同样的运算在下一层内,我们把从第一层得到的值传播到第二层,计算与第二个权矩阵的点乘然后用非线性变换成一个输出概率。


因为我们只有三层神经元,输出值是我们的预测值。我们改善预测值,学习神经网络,是利用优化方法训练。那怎么优化呢?进入数值计算方法知识了。


我们的模型第一次预测值是不准确的。为了改进预测结果,我们首先需要精确地量化我们的预测误差。我们将通过评价误差或者说是损失值,来实现这一步骤。


误差用来刻画预测输出值与实际值的差异大小。当我们有误差值了,要最小化误差,因为更小的误差表示模型预测结果更好。


训练一个神经网络意味着每一次迭代要使误差最小化。我们不想改变输入值,而是改变权矩阵来使误差最小化。如果只是暴力搜索所有可能的权值求解最精确的预测值,将需要很长的计算时间。相反,我们要知道的是如何更新权重的方向,以便在下一轮训练出来的预测更精准。


为了知道这个方向,我们要计算我们的误差对相应的权重的导数。计算这个值要用在数值计算方法中的梯度。当 deriv 等于 True 时,我们对非线性函数求导,实际上就是计算 sigmoid 函数的求导,也就是 sigmoid 函数在给定点的斜率。我们要尽可能地使误差最小化,可以直观地把这个过程看成是把一个球放进碗里,那么最小误差值可能看成是布碗底。



当我们把球放入碗里,我们计算每个可能位置的梯度。如果梯度为负,我们向右边移动球;如果为正时,则我们向左边移动球同时我们用梯度相应地更新我们的权值。我们会持续重复这个过程直到梯度为 0。这样会让我们得到最小的误差值。这个过程被称为梯度下降法。


至于要用编程实现这个过程,我们要计算预测值时,用梯度乘以误差。我们根据梯度得到的误差,记为 l2_delta。这个误差矩阵,每个值都是一个预测输出值,同时得到一个下降方向。我们后面用这个下降方向,更新相应的权重。

这个在给定层计算误差和用这误差来计算误差对权重的梯度,这样我们在相应的方向更新权重,这样的过程在每一层递归运行,从最后一面反向传播到第一层。我们在把误差反向传播之前要用向前传播方法计算预测值这个过程称为(误差)后向传播。


我们会用 l2_delta 乘以它相应的权重矩阵的转置得到前面一层的误差,然后,用这个误差用前面相同的方法运算,得到下降方向来更新相应层的权重,这样误差就减小了。


最后我们会用权重矩阵乘以相应的增量来更新相应层的权重矩阵。执行代码,误差逐次减小,我们预测值最后变得很准确,这样就结束迭代。

完整代码和数据集请参考 Github 链接(点击文末阅读原文进入)。

--------------------------------------------

  Siraj Raval 何许人也?

Siraj Raval 是 YouTube 极客网红,曾任职于 Twilio 和 Meetup,客户包括 Elon Mask 和 Google,教大家如何使用机器学习开发聊天机器人、无人驾驶车、AI 艺术家等视频点击量累计数百万。


  Siraj Raval 为什么这么火?

首先,当然是这位哥伦比亚大学高材生活儿好技术好,用自己特有的方式三言两语就能抛出一个原本晦涩的 ML、DL 概念,让听众细细咀嚼。再者,这家伙幽默逗比、口才便给。兴之所至常手舞足蹈,瞳仁奇光掩映,口吐智慧莲华。深度学习讲师不少,但这么风趣可亲的却不多。


延伸阅读:为什么吴恩达认为未来属于迁移学习?


 研习社特供福利  ID:OKweiwu

关注 AI 研习社后,回复【1】获取

【千G神经网络/AI/大数据、教程、论文!】
百度云盘地址!


  雷锋字幕组志愿者

下列同学参与了本文 / 视频的译制工作!

如果您对我们的工作内容感兴趣,欢迎添加组长微信 “iIoveus2014” 加入字幕组~

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

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