乘着过年的这段时间,决定好好把机器学习入门一下。从李宏毅的课程开始,先把这一段的内容记录下来。
简介
讲到所谓机器学习,自然首要的就是deep learning,作为现代机器学习的主流,其中有很多种模型。李宏毅这里选择从梯度下降开始,介绍了一个最基础和具体的例子。而他也将机器学习的基础步骤给出来了:

首先是定义函数,这个函数目前说是需要自己构建,那我估计也只能从数据中找点规律然后试了。第二步则是定义loss函数,即根据模型猜测值与准确值的差距。最后一步则是根据这个loss函数曲线,对第一步中函数定义中的参数进行修改,将构建的函数尽可能的拟合真实函数也就是将loss减低。
而在上面介绍基础原理的过程中,李宏毅采用了一个线性回归方程作为未知函数。而现实情况里,这几乎是不可能发生的,所以接下的两节课几乎就是在将这三个步骤_主要是第一个步骤复杂化。
而如果要模拟一个复杂的未知函数,可以将一个复杂的函数转化为多个sigmoid函数的叠加结果。所谓sigmoid即S型函数,我们可以通过调整sigmoid的参数来决定斜线的斜率位移。
如图:
一个三段式的斜线函数可以转化成三个不同的sigmoid的叠加和,当然我们也可以用hard sigmoid来进行叠加,但是这里他给出的结论是sigmoid比hard sigmoid更加适用于现实情况。可能后续会再对这个问题进行解释。而抛开这个问题,我们现在有了sigmoid函数,那么我们就可以尽情的模拟任意我们需要的复杂函数,只要段数够多就可以无限接近真实函数。

而最初的线性回归函数也转化成了如右图的方程:
可以看到,此时我们所构建的复杂函数中的参数由bw两个变味了多组cbw。下面那个式子表示的是统计多天的结果,而非一天的。这里的weight也是不同的。

而上述的式子可以表述为下图:

我们将式子中的参数和输入值分离成不同的矩阵,然后最终的结果可以由多个矩阵进行运算后得到。
而对上面的图继续进行拓展就可以得到下图:

而这种涵盖了多层hidden layer的网络就可以叫做deep learning或者神经网络。
下一步是讨论在neural network中不同的neuron如何连接的问题。首先最常见的连接方式叫Fully connect feedforword network,实际操作方式如下图:

在没有添加参数值前这些neural network就叫做a function set。
反向传播
前面我们简单了解了deeplearning和marchine learning 的概念。那么接下来就是要讲将第二步中关于Loss函数的内容了。首先Loss函数还是和之前的计算一样:
不断计算η▽L(θ^0),并且利用这个不断更新新的θ。
而下一部分的内容就是关于到底要如何计算着每一个▽L(θ)矩阵中的微分值。


以上式子中的Cn表示的其实就是计算值与正确结果集之间的距离。

而δC/δw的值根据chain rule可以得到下面那个式子,式子的前半段关于z和w的微分很好计算,因为答案其实就是前一项的输入值。并且只要我们按照layer的正向顺序计算出每个点的输入值,其实就可以直接计算出来了。
而反向传播其实就是用来计算后面那一项C和z之间的微分的。

如图中的递推公式就可以看到δC/δz其实就是一个sigmoid函数的微分乘上一个δC/δa的值,而这里的δC/δa根据chain rule又可以拆分为两个和,这两个和可以一眼看出来和前面的结构十分相似,而这么递推到结尾就可以产生一个递归式的结果,并且不断计算到最上层来。这也就是反向传播的由来。我们根据计算后得到的值不断向前递推计算前值。

.png?table=block&id=e721439b-67f8-4fde-8e9a-291fca4d6796&cache=v2)