从零开始的人工智能、机器学习与深度学习入门

前言

又是一年考研录取的尾声,很多一志愿已确定结果,调剂也快要结束了。一大批新一轮的计算机的研究生即将上岗,抛开硬件方面的不谈,大多数计算机专业的研究方向,无论是图像上的、语音上的、手写识别上的,基础都是机器学习、深度学习,可能老师会丢给你们吴恩达或者其他大牛的课程自己学习。而对于刚刚接触的同学们来说,很多概念都不知所云,我去年也是花了很长时间才弄懂一些基本概念,并且感受到世界的参差的。在此我想分享一些粗浅的东西,也许能帮到一些同学们。如果有同学看了这篇博客,三年内有幸发表了CVPR,ECCV什么的,记得回来评论一下,我可以跟别人吹吹牛批哈哈哈哈~

(下文数学计算的部分也许会有错误,如果有同学算的结果不一样,不要怀疑自己!)

一、人工智能、机器学习与深度学习是什么?

相信很多同学们都对他们的概念有些疑惑,它们的名字大家并不陌生,或多或少都听说过,但是具体是什么有些一头雾水。“人工智能”还好理解一些,而“机器学习”和“深度学习”就听起来很高深了。接下来我说一下我的个人理解。

1.人工智能

我比较喜欢的关于人工智能的说法是:人工智能是通常由人完成的智能任务的自动化。

有些对人来说很直接的任务,对于机器来讲是十分困难的。比如区分图片上的是猫还是狗,判断说这句话的人是生气还是高兴(情绪),自动驾驶等等。对于这些,我们人类可以很直接的做出判断,但是我们很难对机器编写一段代码来实现它,因为要考虑的因素非常非常多。早期的人工智能就是通过硬编码实现的,能实现的智能程度也很有限。于是经过长期发展,人工智能有了新方法,机器学习和深度学习。

2.机器学习

机器学习是最近十来年变得非常流行的,顾名思义就是让机器自己学习什么东西,具体学习什么呢我们下面再说。机器学习的出现就是为了解决早期人工智能硬编码时智能程度有限的问题的。我们用图片说明一下:
在这里插入图片描述
如上图所示,早期人工智能需要将规则编写成代码,使机器输出正确结果。而机器学习是已知数据和答案,自己“学习”到规则。而由于需要让机器学习到规则,因此需要提前准备大量的数据,否则学习到的“规则”就不正确。

例如我们想让计算机判断“猫”和“狗”,我们就需要准备大量猫和狗的图片,并标记他们哪些是猫,哪些是狗,这称为数据的“标签”。这样让机器学习有带标签的数据,我们称之为“有监督”学习,那么相对的就有不带标签的“无监督”学习。

大多数机器学习算法在结构明确的数据上表现良好。什么是结构明确呢?比如电影推荐系统,根据你点击的电影类别,推荐相应的电影。你经常观看哪个类别的电影,就将哪个类别标记为1,观看的少的标记为0,这样可以清晰明确的将你观影特点记录下来,以供机器学习使用。记录下来的数据就称为“特征”,机器学习需要的数据就是特征。所有机器学习算法都涉及一个重要方面就是特征工程,数据科学家们花了大量时间获取机器学习算法运行的正确特征,这是一个非常具有挑战性的工作。比如图像领域,图像中提取的特征维度很高,称为特征向量,概念就是线性代数里面的“向量”,1×n维。可以参考我之前的写的sift特征向量

之前说了获取数据特征有时比较困难,那么如何解决呢?这就进入了下一阶段:深度学习。

3.深度学习

深度学习与机器学习在学习方式上是一致的,区别在于深度学习的神经网络层的隐藏层比较多(不然怎么体现出深度呢)和获取特征的不同,当然,这是我的个人见解。关于什么是隐藏层,下文有提到别急。传统的机器学习使用手写的特征训练算法,深度学习使用现代技术自动提取特征训练算法。如何自动提取特征呢?方法很多,常用的是CNN(Convolutional Neural Networks)卷积神经网络(不是美国有线电视新闻网~),我们有机会再说,这次只讲“学习”的事儿。

总的来讲,人工智能、机器学习和深度学习大致上算是等价吧,名词相互使用也没有问题。它们的关系类似于下图:在这里插入图片描述

二、如何学习?学习什么?

人类大脑里有上千亿的神经元,学习的过程会不断刺激神经元再生,引发xxxx…(这是篇讲生物博客吗?)

科学家们把“神经网络”这个生物上的名词迁移到了机器学习中,了解机器学习,就先要了解神经网络这个结构(当然不是生物上的结构了)。神经网络结构如下图所示:
在这里插入图片描述

这就是神经网络的机构了,我只画了四行三列,实际上的神经网络行数列数都远远超过这个数量。input表示输入的数据,每个圆圈代表一个神经元节点,神经元节点实际上是一个计算的过程,经过神经元节点的数据经过计算输出一个新值,作为下一层神经元节点的输入,再次计算得到新结果并输出,这个过程循环往复。下面我们开始学习过程。

1.正向传播forward

在这里插入图片描述

如图i1,i2是输入的数据,底下多出来的两个节点称为“偏移量”,是每次计算需要加上的。w11至w24,包括下面的w10、w20,都称为“权重”,机器学习学习的就是这个权重。权重的初始值我们随机生成。

计算得到:h1 = i1 * w11 + i2 * w13 + 1 * w10 = 0.21

隐藏层中有个概念叫“激活函数”,h1需要经过激活函数计算后方可输出。激活函数常见的有三种选择:

  • sigmoid函数
    在这里插入图片描述

  • tanh函数(对没错,就是三角函数,未知数用h表示的,名字就这么起得)

  • Relu函数
    在这里插入图片描述

我们选择Relu函数,那么h1经过Relu函数输出后仍然是0.21。

计算h2 = i1 * w12 + i2 * w14 + 1 * w10 = 0.235(为省事偏移量的权重就设一个了)

经过Relu输出后仍是0.235

如此继续计算o1 = 0.446,经过Relu后仍为0.446。o2 = 0.46825,经过Relu后仍为0.46825。

至此一次正向传播过程结束。但是之前我们提到了“标签”,这个标签就是我们希望最后神经网络输出层给我们的答案。假设我们希望输出的o1是0.1,o2是0.9。那么0.446这个值显然不是我们希望的,为了让o1的值接近0.1,需要进行“反向传播”。

2.反向传播backward

要进行反向传播,首先我们要知道输出值和标签值的误差是多少,这就用到另一个概念“损失函数”。损失函数也有很多常见损失函数,我们这里用平方差损失函数,公式如下:
在这里插入图片描述
Y为标签值,f(x)为输出值。经过计算,L = (0.1 - 0.446) * (0.1 - 0.446) + (0.9 - 0.46825) * (0.9 - 0.46825) = 0.3061240625。

这表明我们这个神经网络的输出值与标签值的差距是0.3061240625,为了缩小这个误差值,我们只能改变权重(输入值是没法改变的嘛)。那么问题来了,权重改变多少呢?这里我们需要用到一个公式,比如要更新w21,如图:
在这里插入图片描述
η表示学习率,这是一个超参数,超参数的意思是人手动设置的,也就是说学习率需要我们提前定义好,假如我们设置学习率为0.1。这就是梯度下降的优化算法,优化算法也有很多,参见:梯度下降优化算法总结

为了方便表示,我们重新画一下神经网络图:
在这里插入图片描述
隐藏层和输出层节点中间加了一条线,左侧表示输入的值,右侧表示经过激活函数后的值。

根据链式求导法则(被高数支配的恐怖):
在这里插入图片描述
根据损失函数的公式,L与oo1的关系为:

在这里插入图片描述
oo1与o1的关系依照Relu函数公式为:oo1 = o1

o1与w21的公式为:o1 = ho1 * w21 + ho2 * w23 + 1 * w20

根据求导公式,结果如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全部带入权重更新公式中:
在这里插入图片描述
其他权值也按这样的步骤更新,全部更新一遍后,一次反向传播过程结束。如此反复的正向、反向传播成百上千轮次,如果神经网络模型合适的话,误差值会成梯度下降,最终收敛,趋近于一个常数。如果神经网络模型不合适,损失函数就不会收敛,这也就意味着训练失败。

更加详细的可以访问这位大牛的博客:「修炼开始」一文带你入门深度学习,我也是看了他的内容才对机器学习清晰了很多。

总结

以上就是机器学习的关键流程了,想想用某种语言实现起来就很麻烦,幸运的是已经有人开发出了机器学习的框架,比较流行的是tensorflow和pytorch(因此学好python很重要),正向传播反向传播的流程已经实现好,我们只需要把神经元数量、学习率输入其中,选择好损失函数和梯度下降的优化函数,就可以训练算法了。希望这篇博客能帮助你入门。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值