李宏毅机器学习Task7打卡

经过本次的课程,对机器学习的基本概念和原理有了了解。下面是对这次课的总结:
首先,机器学习是什么,机器学习就是让计算机运用数学的理论,通过训练来获取新的知识的技能,实现对人类行为的模拟,它是人工智能的核心。

那么怎么通过训练来让计算机获取新的知识呢?
image
以图片识别为例。就是需要先有一个function set,里面有一系列的function,然后通过一定的方法评判里面function的好坏,并选择最优秀的function。这个function可以实现输入一张图片,并从中识别出来里面的动物是什么。

那么什么标准可以评判一个function的好坏呢?这里就又需要定义一个loss function,它的功能就是计算标准答案和function set 里面function生成的答案之间的差距。

我们通过gradient descent,可以不断更新function的参数,使得loss function的值最小。
image

这里的gradient descent是通过偏微分的方法,通过计算loss的斜率来表明参数应该以怎样的趋势去更新,才能走到一个斜率为0的地方。(毕竟现在我们先姑且认为斜率为0的地方为最优解)

但是虽然大步骤非常的简单,就是:

  1. 有一个function set
  2. 评判function set 里面function的好坏
  3. 找到最好的function

但是其实里面也有很多需要讨论的地方:
比如说有时候步长(learning rate)会影响训练的效果,因为如果步长太短,可能会训练的非常冗杂;而太长则可能导致跳过最优解。
当然也有解决方法,其中的方法就包括有Adagrad ,Adam的应用。通俗点解释就是在每次更新参数的时候,不止要考虑当前位置的gradient descent,还需要考虑之前所有的gradient descent。这样就会较好的解决步长的问题。
image

当然不仅步长会导致机器学习训练的失败,还有训练结果会停在驻点、鞍点等等都会导致训练进行不下去,这些情况又该怎么解决呢?
其中的一种解决方式就是运用Hessian矩阵,在对loss求二次微分后,可以得到hessian矩阵,它的参数的正负情况,也就代表了该点是saddle point还是local minima,当然同时它的特征值和特征向量也指明了怎么去逃离这个saddle point。
image

此外,输入的批次也会造成训练结果的差异。毕竟输入的规模也影响了参数更新的频率,和每次参数更新时需要考虑的数据。

深度学习中定义的function就是神经网络,neural network就是将一个个小的function看做神经元,每个神经元都有自己的权重和bias,然后这些神经元通过一定的方式连接起来(最常见的是fully connected),这些再作为一个整体的function,就是深度学习。
image

但是深度学习的参数太多,计算量较大。所以在更新参数的时候可以采用feedback的形式,反向传播,通过输出来向前更新参数。这样子既可以实现参数的更新,也不会加大计算量。
image

最后呢,就是介绍了卷积神经网络CNN。
image
CNN一般被用在图像处理上,是因为:

  1. 要甄别一个pattern不需要看整张图片,只需要一小部分就可以
  2. 同样的pattern可能会出现在图片的不同区域
  3. 适当的重采样不会改变对影像的判读结果
    而它的基本思想是拿掉fully connected neural network中的一些参数,简化计算。是通过一个个filter实现的,通过filter在输入图像上的移动得到新的值,并且对新的matrix进行max pooling,实现数据的简化。
    image

然后还介绍了deep dream,deep style,CNN在下棋、声音识别和文字识别中的应用。
Deep dream比较有意思,就是让机器将所看到的更像它所看到的,比如说机器在一张图片上识别出了“熊”这个动物,那么它就是将“熊”这个区域附加上更多“熊”的特征。使得它所侦测出来的“熊”,更像一个“熊”
其他在声音识别和文字识别的理论大多都和图像识别相似,但是要注意filter滑动的方向,声音识别时只需在频率上移动即可,文字识别需要沿着句子的方向进行滑动。

浙ICP备19012682号