深度学习如何快速入门?其实就和撩妹一样简单!

导读:本文将带领你一边撩妹,一边探讨深度学习! 关于深度学习如何快速入门,比如《Python基础教程》、Peter harrington《机器学习实战》和李航的《统计学习方法》等,…

导读:本文将带领你一边撩妹,一边探讨深度学习!

关于深度学习如何快速入门,比如《Python基础教程》、Peter harrington《机器学习实战》和李航的《统计学习方法》等,浏览此文的很多大神也一定比我更加了解和清楚深度学习,网上随手一搜,各种深度学习的资料、学习方法也非常多,不过貌似大部分都不太适合初学者。

深度学习如何快速入门?其实就和撩妹一样简单!

深度学习

这里有几个原因:

1、深度学习需要一定的数学基础。如果不用深入浅出的方法来讲,有些初学者就会产生畏难的情绪,潜意识上会觉得“Deep Learning”真的很“Deep ”;

2、深度学习还需要一定的英文基础,但我们有翻译软件呀,英语基础差虽然会在理解上造成一定难度,但不需要过分担心;

3、中国人或者美国人写的文章普遍难度大,要说原因为何?估计是我大中华智力水平就是这么棒吧!

所以,这样听起来,深度学习,确实需要一定的数学基础,但真的那么难么?这个,还真没有,但小编才疏学浅,如有一些言论不对,欢迎大神们指出呀!

这里,先推荐一篇非常不错的文章:台大的李宏毅教授的《1天搞懂深度学习》,300多页的ppt课程。

深度学习如何快速入门?其实就和撩妹一样简单!

17年课程截图

下面,我们回归正题,学习 深度学习 的数学基础,很多文科生可能会说,我没有学过高等数学,这太难了!别担心,我们只要学过初中数学即可,需要知道导数和相关的函数概念就可以了。

鲁迅先生有一句名言:“世上本没有路,走的人多了便成了路”,数学基础不扎实,多学几遍不就好啦!

让我们成为养猪大户来了解导数/函数

设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx→0时极限存在,则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数记作

深度学习如何快速入门?其实就和撩妹一样简单!

深度学习如何快速入门?其实就和撩妹一样简单!

需要指出的是:

深度学习如何快速入门?其实就和撩妹一样简单!

两者在数学上是等价的。

导数是什么,无非就是变化率呗,这时候,我们假设自己是一个养猪大户:

今年卖了100头猪,去年卖了90头,前年卖了80头…(en,生意越来越好了)

变化率或者增长率是什么?每年增长10头猪,是不是很简单。

这里需要注意有个时间变量:(年)。

我们卖猪的增长率是10头/年,也就是说,导数是10. 函数y=f(x)=10x+30,这里我们假设第一年卖了30头,以后每年增长10头,x代表时间(年),y代表猪的头数。

当然,这是增长率固定的情形,现实生活中,很多时候,变化量也不是固定的,也就是说增长率也不是恒定的。比如,函数可能是这样: y=f(x)=5x²+30,这里x和y依然代表的是时间和头数,不过增长率变了,怎么算这个增长率,我们回头再讲。或者你干脆记住几个求导的公式也可以。

深度学习还有一个重要的数学概念:偏导数,偏导数的偏怎么理解?

深度学习如何快速入门?其实就和撩妹一样简单!

深度学习如何快速入门?其实就和撩妹一样简单!

深度学习如何快速入门?其实就和撩妹一样简单!

为了更好的理解,我们还是把自己想成一个养猪大户(小编是多想成为养猪大户)

刚才我们讲到,x变量是时间(年),可是卖出去的猪,不光跟时间有关啊,随着业务的增长,你成为了一个真正的养猪大户,你扩大了养猪场,还雇了很多员工一起养猪。

所以方程式又变了:y= f(x) = 5x₁² + 8x₂ + 35x₃+ 30

这里 x₂ = 面积,x₃ = 员工数,x₁ = 时间

上面我们讲了,导数其实就是变化率,那么偏导数是什么?

偏导数无非就是多个变量的时候,针对某个变量的变化率呗。

在上面的公式里,如果针对 x₃ 求 偏导数,也就是说,员工对于猪的增长率贡献有多大?或者说,随着(每个)员工的增长,猪增加了多少?这里等于35 / 员工,也就是每增加一个员工就多卖出去35头猪。

计算偏导数的时候,其他变量都可以看成常量,这点很重要,常量的变化率为 0,所以导数为 0,所以就剩对 35x₃ 求导数,等于35. 对于 x₂ 求偏导,也是类似的。 求偏导我们用一个符号 表示:比如 y/ x₃ 就表示y对 x₃求偏导。

大家看我一直在畅想成为养猪大户的事,估计不少人觉得我一直举这些例子有什么关系?有关系,我们知道,深度学习是采用神经网络,用于解决线性不可分的问题。

深度学习概念

深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

关于这一点,我们回头再讨论,大家也可以网上搜一下相关的文章。我这里主要讲讲数学与深度学习的关系。先给大家看几张图:

深度学习如何快速入门?其实就和撩妹一样简单!

图1

图1:所谓深度学习,就是具有很多个隐层的神经网络。

深度学习如何快速入门?其实就和撩妹一样简单!

图2

图2:单输出的时候,怎么求偏导数

深度学习如何快速入门?其实就和撩妹一样简单!

图3

图3:多输出的时候,怎么求偏导数。

后面两张图是日语的,这是日本人写的关于深度学习的书。感觉写的不错,把图盗来用一下。(悄悄告诉你,小编也看不懂,图片来源:知乎)

所谓入力层,出力层,中间层,分别对应于中文的:输入层,输出层,和隐层。

大家不要被这几张图吓着,其实很简单的。

深度学习如何快速入门?其实就和撩妹一样简单!

以撩妹为例,来了解深度学习的不同阶段

干脆再举一个例子,就以撩妹为例。男女恋爱我们大致可以分为三个阶段:

1、初恋期。相当于深度学习的输入层。一个妹纸吸引你,可能有很多因素——借用一句网上的金句:始于颜值,忠于人品,当然可能还有很多其他因素,这些都是输入层的参数,对每个人来说权重可能都不一样。

2、热恋期。我们就让它对应于隐层吧。这个期间,双方十分甜蜜,对对方都有了初步的认识和了解,也会慢慢发现对方的一些缺点,就像你渐渐有些入门深度学习了,开始产生了浓厚的想要近一步了解他的欲望,但同时也会遇到一些困难。

3、 稳定期。对应于输出层,两个人是否合适,就看你们之前的相处期间双方适应的如何了。

想必有过撩妹经验的汉子和被撩的妹纸们都知道,磨合期很重要,但是怎么磨合呢?就是不断学习不断进步的过程呀!比如女朋友今天想吃黑巧克力味的蛋糕,你不小心买成了白巧克力的蛋糕,女朋友,当然就会不开心啦!下次你就会牢记,女朋友喜欢黑巧克力味的,不爱白巧克力!

看完这个,可能不少汉子要开始反思自己的撩妹过程是否合适啦,有点不放心,所以补充一下。撩妹和深度学习一样,既要防止欠拟合,也要防止过拟合。

所谓欠拟合,对深度学习而言,就是训练得不够,数据不足。就好比,你撩妹经验不足,需要多学着点,各种大小节日送花送礼物当然是最基本的了,同时还需要提高其他方面,比如,多为对方考虑,从小细节上更加体贴,但本文的重点不是撩妹,所以回到深度学习上来,这里需要提一点,欠拟合固然不好,但过拟合就更不合适了。

深度学习也是一个不断磨合的过程,刚开始定义一个标准参数(这些是经验值。就好比情人节和生日需要送礼物一样),然后不断地修正,得出图1每个节点间的权重。

为什么要这样磨合?试想一下,我们假设深度学习是一个小孩,我们怎么教他看图识字?肯定得先把图片给他看,并且告诉他正确的答案,需要很多图片,不断地教他,训练他,这个训练的过程,其实就类似于求解神经网络权重的过程。

以后测试的时候,你只要给他图片,他就知道图里面有什么了。

所以训练集,其实就是给小孩看的,带有正确答案的图片,对于深度学习而言,训练集就是用来求解神经网络的权重的,最后形成模型;而测试集,就是用来验证模型的准确度的。

对于已经训练好的模型,如下图所示,权重(w1,w2…)都已知。

深度学习如何快速入门?其实就和撩妹一样简单!

图4

深度学习如何快速入门?其实就和撩妹一样简单!

图5

我们知道,像上面这样,从左至右容易算出来。但反过来呢,我们上面讲到,测试集有图片,也有预期的正确答案,要反过来求w1,w2……,怎么办?

求偏导

绕了半天,终于该求偏导出场了。目前的情况是:

1、我们假定一个神经网络已经定义好,比如有多少层,都什么类型,每层有多少个节点,激活函数(后面讲)用什么等。这个没办法,刚开始得有一个初始设置(大部分框架都需要define-and-run,也有部分是define-by-run)。你喜欢一个美女,她也不是刚从娘胎里出来的,也是带有各种默认设置的。至于怎么调教,那就得求偏导。

2、我们已知正确答案,比如图2和3里的 r,训练的时候,是从左至右计算,得出的结果为 y, r 与 y 一般来说是不一样的。那么他们之间的差距,就是图2和3里的E。这个差距怎么算?当然,直接相减是一个办法,尤其是对于只有一个输出的情况,比如图2; 但很多时候,其实像图3里的那样,那么这个差距,一般可以这样算,当然,还可以有其他的评估办法,只是函数不同而已,作用是类似的:

深度学习如何快速入门?其实就和撩妹一样简单!

不得不说,理想跟现实还是有差距的,我们当然是希望差距越小越好,怎么才能让差距越来越小呢?得调整参数呗,因为输入(图像)确定的情况下,只有调整参数才能改变输出的值。

怎么调整?怎么磨合?

刚才我们讲到,每个参数都有一个默认值,我们就对每个参数加上一定的数值∆,然后看看结果如何?如果参数调大,差距也变大,你懂的,那就得减小∆,因为我们的目标是要让差距变小;反之亦然。

所以为了把参数调整到最佳,我们需要了解误差对每个参数的变化率,这不就是求误差对于该参数的偏导数嘛。

关键是怎么求偏导?图2和图3分别给了推导的方法,其实很简单,从右至左挨个求偏导就可以。相邻层的求偏导其实很简单,因为是线性的,所以偏导数其实就是参数本身嘛,就跟求解x₃的偏导类似。然后把各个偏导相乘就可以了。

深度学习如何快速入门?其实就和撩妹一样简单!

深度学习

这里有两个点:

这里有两个点:一个是激活函数,这主要是为了让整个网络具有非线性特征,因为我们前面也提到了,很多情况下,线性函数没办法对输入进行适当的分类(很多情况下识别主要是做分类),那么就要让网络学出来一个非线性函数,这里就需要激活函数,因为它本身就是非线性的,所以让整个网络也具有非线性特征。另外,激活函数也让每个节点的输出值在一个可控的范围内,这样计算也方便。

貌似这样解释还是很不通俗,其实还可以用撩妹来打比方;女生都不喜欢白开水一般索瑞无畏的日子,因为这是线性的,生活中当然需要一些小小浪漫和小小惊喜啦,这个激活函数嘛,我感觉类似于生活中的小浪漫,小惊喜,是不是?

相处的每个阶段,需要时不时激活一下,制造点小浪漫,小惊喜,比如:一般爱漂亮的女生都喜欢买一些护肤品、美妆产品,男生就可以适时留意他喜欢哪些品牌的产品,在适当的时机送给他,这样时间一久,她感受到,你对他的真心与体贴,自然也会更加爱你。因为你的非线性特征太强了。

当然,过犹不及,小惊喜也不是越多越好,但完全没有就成白开水了。就好比每个layer都可以加激活函数,当然,不见得每层都要加激活函数,但完全没有,那是不行的。

由于激活函数的存在,所以在求偏导的时候,也要把它算进去,激活函数,一般用sigmoid,也可以用Relu等。激活函数的求导其实也非常简单:

深度学习如何快速入门?其实就和撩妹一样简单!

求导: f'(x) = f(x)*[ 1 – f(x) ] 这个方面,有时间可以翻看一下高数,没时间,直接记住就行了。 至于Relu,那就更简单了,就是 f(x) 当 x < 0的时候 y 等于0,其他时候,y等于x。 当然,你也可以定义你自己的Relu函数,比如 x ≥ 0 的时候,y = 0.01x,也可以。

另一个是学习系数,为什么叫学习系数?刚才我们上面讲到∆增量,到底每次增加多少合适?是不是等同于偏导数(变化率)?经验告诉我们,需要乘以一个百分比,这个就是学习系数,而且,随着训练的深入,这个系数是可以变的。

当然,还有一些很重要的基本知识,比如SGD(随机梯度下降),mini batch 和 epoch(用于训练集的选择),限于篇幅,以后再侃吧。其实参考李宏毅的那篇文章就可以了。

其实上面描述的,主要是关于怎么调整参数,属于初级阶段。上面其实也提到,在调参之前,都有默认的网络模型和参数,如何定义最初始的模型和参数?就需要进一步深入了解。 不过对于一般做工程而言,只需要在默认的网络上调参就可以了,相当于用算法; 对于学者和科学家而言,他们会发明算法,难度还是不小的。向他们致敬!

最后,小编想说,撩妹的唯一秘诀是用心(这真是一个万年不怕煮的鸡汤),深度学习也要用心,毕竟深度学习比撩妹更为简单,你付出多少,它也会反馈给你多少知识!


注:文中涉及深度学习的一些看法和见解,如果大家有不一样的看法和见解,欢迎留言评论,和小编探讨!

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回顶部