思考:2021年还可以入门深度学习吗? (3)

取自cs231n

上面这张图最右面是算法得出的结果,分数最高的一项就是算法判断出最有可能的结果(上面显然判断错了,本来是猫的图,但是猫的得到为负,而狗的得分是437,显然此时的算法错把猫识别成狗了,需要继续“操练”(训练))。

而无监督学习,就不需要标记了,让你凭自己的感觉去判断是否正确,就像给你一堆三角形、圆形、或者长方形的卡片让你将他们摆成三类。你凭借对这些卡片的形状进行区别,从而将这些卡片分为三类。

回到我们之前的问题:5 = w*x + 4。

首先我们不知道w是多少,这里我们把w称之为权重。我们假设这个w是1(这是权重的初始化,而初始化方法也有很多),然后我们要求的输入x是2(这里的输入是固定的,是2也只能是2,2在这里相当于数据,从生活中获得到的数据,比如你往自动售水机投入1个硬币会出来一瓶矿泉水,这里的1就是输入,你投入0.5个或者2个硬币都不会得到矿泉水)。

这样,x是2,w是1,这是我们第一次尝试,我们运行一遍算法,很快我们发现,1*2 + 4 = 6。6不等于5,结果当然错了。

错了就错了吗?为了达到正确的结果,我们要设计一个标准,在这里我们设计一个Loss,以下简称为L,我们令L = y - 5,是我们算法结果和正确结果(这里的正确结果又可以称之为Ground truth)的差。这个Loss就是损失,这个函数就是损失函数,损失函数表明了我们算法得出的结果和实际的结果中有多大的差距,当L为0时,说明我们的算法可以完美地得到我们想要的结果。

但显然这里的L是6-5=1,损失不为0,我们对损失L进行求对权重w的导数,通过链式法则来进行:

dL/dw = dL/dy * dy/dw

很显然可以得到 dL/dw = 1*2(x带入为2)。

于是我们得到了损失对输入的导数,在这里我们再定义一个学习率:r(learning rate)我们设其为:0.1,于是接下来我们得到了关于x的梯度下降公式:

w = w - r * dL/dw

带入具体数字:
w = 1 - 0.1 * 2 = 0.8

此时,权重w为0.8。
回到最开始的公式:w*x + 4 = 0.8 * 2 + 4 = 5.6

虽然5.6依然不等于5,但是相比于之前的结果6来说,稍微接近了,从L中就可以看出来,L = y - 5 = 5.6 - 5 = 0.6,经过一次“学习过程”损失变小了。

看到这里很容易发现,这个学习率如果改成0.2那么岂不损失下降的更快?当然,学习率是超参数(即根据经验来设置的参数),是由我们自行设定的,太高太低都不好,合适即可。

借用cs231n课程中的一张图:

好的学习率

epoch即训练次数,不同的学习率造成的结果是不一样的,合适即可。

这样,我们只训练了一次使损失由1降为0.6,当我们训练多次的时候loss会继续下降,但需要注意,loss并不会“恰好”地降为0,这种情况很少见,我们以后在实验中loss降到一定程度不会发生变化说明已经训练结束了。

机器学习暂且说这么多。

深度学习

深度学习是机器学习的一部分,可以归纳为具有网络层数更深的神经网络。

神经网络的讲解内容网上很多,不再赘述,大家可以看下文的相关资料部分。

相关资料

机器学习和深度学习相关的资料很多,如果想全面列举的话,100页的篇幅都列举不完,在这里我只向初学者推荐一些极具性价比的一些资料。另外,机器学习和深度学习理论上不分家,但是既然要学习有个先后过程是比较好的,我的建议是先对机器学习有全面的认识和实践,然后再来进行深度学习,这样基础将会很扎实。

书籍

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpffxg.html