机器学习初涉

大纲

  1. 深度学习简介
  2. 训练深度神经网络的一些要点
  3. 卷积神经网络的变量
  4. 下一个浪潮

深度学习简介:

为什么我们认为深度学习是深度的? 我们如何开始一个最基础的深度学习的项目?

深度学习的目的: 深度学习事实上是想要找到一个函数,尤其适合用来解决线性不可分的问题。

深度学习的框架: 拿图像识别举一个例子,我们有一张猫的图像,我们希望这个函数可以给我们返回一个’cat’,事实上我们有一系列的函数,每一个函数可能给出不同的单词(对应同一个图片),那么根据这个图片识别的准或者不准就是这个函数的表现是否是良好的,我们给出了反馈,最终不断的训练我们的解,这就是有监督的学习。 深度学习的三个步骤: 1. 定义一系列的函数 2. 看函数是否具有优良的性质(识别的准确性) 3. 挑选出最好的函数

在这三个步骤中,我们通常把第一步换成一个卷积神经网络 一个最简单的线性感知器模型(神经元的模型): $$ z = a_1w_1+….a_kw_k+…..a_Kw_K+b $$ 其中的a1…ak就是每一个变量的我们设置的权重,b被称为bias,最终得到的值是z,然后经过一个激活函数$\epsilon(z)$来得到最终的a的取值。通常来讲,在卷积神经网络中,通常选用sigmoid函数来作为整个网络的激活函数(activate function),这个函数的形式如同下图所示: $$ \epsilon(z) = \frac{1}{1+e^{-z}} $$ 在卷积神经网络中,不同的连接对应着不同的网络的结构,每一个神经元都有着不同的权重和偏差,这个就是网络的参数$\theta$,每一个神经元的后面都跟着一个激活的函数,它的目的就是为了引入非线性,随便选一个就行,只要是非线性的,不同的激活函数存在着不同的优点和缺点,这个需要自行判断。

卷积神经网络

全连接的前馈控制的网络: 通常也叫Fully Connect Feedforward Network 这种神经网络的构成一般是由输入层,中间的隐藏层,以及最终的输出层。

深度这个词的意思就是有很多隐藏的层。 输出层的选择一般是softmax layer,为什么我们要选择这个输出层呢? 先看一下传统输出层,对于每一个z的求解经过一个激活函数得出遗传的输出变量,大水牛Hi通常来讲,很有可能神经网络的输出可能是任何的值,这样就不太好解释,但是在使用softmax函数时,就有如下的好处,首先理解一下。

softmax函数的构造:将每一个输出除以所有输出的和并且最终得出相应的比例系数,就像概率一样,每一个输出$y_i$都是有如下的情况: $$ 0<y_i<1~and~\sum y_i = 1 $$ 用手写数字识别来举个例子,输入的部分是16$\times$16个值,代表一个16$\times$16的点阵,有涂抹的部分为1,没有涂抹的部分为0,输出一共十个值,经过了softmax的优化之后,最终输出的结果可以看成是不同维度作为不同数字的置信度。 也就是说,对于每一个256位的输入,对应一个10位的输出,分别对应着所有的数码,最终,我们需要决定的就是中间的函数应当如何建立,或者说,中间的函数集应当如何确定,来实现一个比较良好的拟合效果。

判断函数是否具有优良的性质

训练数据:预先准备好的具有标签的训练数据 训练目标:打个比方,对于刚才的手下数字识别,我们的训练目标就是让$y_1$这个值是最大的,就是实现了我们的目标。 那么,一个优秀的函数就是对于所有的例子都实现尽可能低的错误率。 定义一个变量来实现当前的损失:softmax loss,例如可以用两组向量之间的距离来定义差别有多大。我们的目标就是找到一个函数(事实上就是神经网络的参数)来将这个总的loss减到最小的方式。

找出最优秀的函数

怎么找出最优秀的函数呢?就是上文说的,找到这个最小化整体loss的函数,怎么找? 当然,我们可以通过枚举的方式搞定,但是算一算发现并不靠谱,因为以一个1000个神经元作为例子来进行计算,我们需要穷举近乎$10^6$个变量的不同取值,而这是不可能的。 我们使用另一种方法,最简单的就是梯度下降法。首先,选取一个任意的初值,随机选取,通常效果就已经很不错了,具体的步骤如下所示: 1. 对于w选取一个初值 2. 计算L对于w的偏导函数的取值,如果是负的就增加w,如果是正的就减小w 3. $w = w-\eta \partial L/\partial w$其中的$\eta$我们称为学习率。 4. 重复上述的过程知道w的偏导已经非常小直到可以接受。

这个函数最终能否得到最低点事实上是不能保证的,因为从理论上来说,这个就只能保证收敛到所谓的极点,而不是最终的全局最低点(当然是有可能的)不同的起始点给我们带来不同的结果,有一些小技巧可以减小进入局部最小值的几率,但是并不是从数学意义上保证的。 反向传播(Backpropagation) 反向传播算法是一个优秀的计算目标函数对于目标变量偏导的算法,一般来说,这些算法都有人帮你解决了。这就是机器学习的第一课。

为什么需要深度:

因为在参数越多的条件下,表现也就越好。

通用的引理:

任何的连续的函数$f:R^N–R^M$都可以被一个含有一个隐含层的网络来表示(前提是给出足够多的隐含神经元),那么有一个问题: >为什么我们是需要深度的网络而不是一个庞大的(胖的)网络?

存在两者的对比,一个又高又瘦的网络以及一个又胖又矮的网络,采用相同的数目的神经元,哪一种效果更好?可以看到(根据数据显示)基本上来说是层数增加对于词语识别率的提升是比增大一层网络的规模要好得多的,

一个类比来解释为什么增加深度更好

将逻辑电路与卷积神经网络进行对比: 逻辑电路由门电路构成,神经网络由神经元构成。 一个两层的逻辑门电路可以表示任何的布尔型的函数,一个隐藏层的神经网络可以表示任意的连续函数。 使用多层的逻辑门电路可以建造形式更加简单的函数,可以使用更少的门电路,使用多层神经网络可以同样可以利用更少的参数来组建性能相同的函数,会使用更少数据吗?

模块化工作

基础分类器:将深度的神经网络进行模块化,每一个基础的分类器可以有丰富的训练样本,比如说,一个图片,一个分类器是判断男女,一个分类器是判断头发长短,多个分类器提取出不同的特征。然后将分类器提取出的特征做一个笛卡尔积,就得出了对于一张图片属性的判断。由输入层-第一层作为最基本的分类器,而后的层数可以用来当作建立分类器的模块。

属于深度学习的”hello,world”

深度学习领域中,”hello,world”等级的项目就是MNIST手写数字识别这个问题,具体的解决方案可以使用Tensorflow,Keras等深度学习的框架。

Avatar
Haowei Sun
Undergraduate of Automation