学习视频网址:https://www.bilibili.com/video/av48285039?p=11
Deep Learning 的发展历程:
Deep learning 和Machine Learning的过程是一样的,可以总结为三个步骤:
对于DL而言,第一步定义一个函数集合就相当于定义一个neuron network。
示例,neuron network 的一种形式:
将两个LR输出合并,输入到一个函数中形成一个Neuron,最后再做一次输出变换:
我们可以利用不同的方法连接这些neuron network,这样就可以得到不同的structure。neuron network中所有的参数就是整个network的参数。
这些neruon怎么连接起来呢?
这里有很多种方式,怎么连接是人为手动设计的;最常见的一种连接方式是全连接fully connect feedforward network(卷积是另外一种连接方式);
全连接网络结构简单视图,一共6个neuron,两个一排。每个neuron 都有一组weights和一组biases。这组参数是根据training data训练找出来的。
输入是(1,-1),为第一层的neuron随机初始化一组参数,neuron的function是Sigmoid:
假设其中的neuron中参数都是已知的,就可以根据如上计算得到每个neuron的输出:
若输入为(0,0),则结果为:
所以对于一个neuron network就可以看成是一个function,它的输入是一个vector,输出也是vector。
如上例可表达为:
如果一个neuron network的参数是已知的,他就是一个function。如果参数是未知的,我们只知道这些neuron network是如何连接的,这样的一个neuron network实际上就是定义了一个neuron structure 的function set。为每个neuron 设置不同的参数就得到不同的function,把这些可能的function都集合起来就得到了一个function set。
上面是对全连接结构的特殊介绍,更general的结构如下:
可以看到一共有L层的neuron,每一层都有若干个neuron.因为每一层的neuron都是两两连接的,所以叫全连接;又因为连接的方式是由前往后逐步传递的所以又称为feedforward network.
Deep learning 就是有多个Hidden layers组成的网络结构。具体有几层算作深度学习这个因人而异:
通常我们使用Matrix operation来表示neuron network的运作。
还是用上面的例子来解释:
更通俗的来说,
其中W是每层neuron的weights矩阵,b是每层neuron的biases的矩阵。输入matrix是X,第一层得到的输入是a1,以此类推得到输出y:
这样做的好处是可以利用GPU做运算,这样比用cpu要快。
怎么理解这整个neuron network?
Hidden layers可以理解为在做特征抽取,代替人工特征工程。从输入X到hidden layer最后的输出(x1,x2,...,xk)就可以看成是提取后的特征;
output layer可以理解为在做一个多分类的分类器,这个多分类是那前一个layer的output当做feature,即他不是直接使用输入X,而是使用经过多个hiddden layers之后提取出的特征(x1,x2,...,xk)来作为输入。
图像识别的例子:
输入一张图片到Machine,然后输出数据。
上面是一张有256个pixel的图片,输入表示:有墨迹的地方设为1,空白的地方设为0.输出是一个一维10行的向量,每个元素表示其是该个数据的几率:
最大的几率是第二个位置为0.7,故machine认为这个图片上的数据是2.
要有多少个hidden layer,多少个neuron,其中的参数怎么设置;我们要做的就是利用GD来找到一个最好的function来表示这个machine。
小结:
怎么决策layers的数目和每个layer中neurons的数目?——经验和直觉+多方的尝试
从非DL的方法到DL的方法,我并不认为ML变的简单了,而是我们把一个问题转化为另外一个问题。
对于不是deep model,需要得到好的结果需要做 feature engine去找到一组好的feature,但是对于DL 的model不需要做Feature Engine,例如做图像识别的时候可是直接把pixel输入到model中;然而DL带来了新的问题:需要定义network structure,所以问题从怎么抽取特征转换成如何定义网络结构。
DL是否真的好用,要看哪个问题比较容易,我个人认为如果是语音、影像以及图像识别define network structure可能要比feature extract容易。人类的听和看都太过于潜意识,影像识别目前还无法知道人类是如何辨识的,故而很难让人抽取有用的特征让linern model去学习。所以不如就让machine自己尝试找出好的structure,这件事情反而变的比较容易。
deep learning 在nlp上面performance并没有那么好:
个人认为:人在做Nlp方面是比较强的,NLP对人来说比较容易设计rule,因此设计的较好的rule往往可以得到不错的结果。因此deep learning看起来就并没有那么有用。
可不可以自动学习network 的structure?
可以。例如:Evolutionary Artificial Neural network;不普及不是很成熟。
可不可以自己设计network structure?
可以。
文章开始就介绍了,DL有三个步骤,上面第一步做完了,第二步就是定义一个function的好坏(怎么决定一组参数的好坏):
以手写体识别为例:
判断这组参数好坏就是对每组参数的输出和目标输出做cross entropy。然后通过变换不同的参数让这个值最小。
怎么找最合适的参数去minimiz loss,使用的方法是Gradient Descent。先初始化一组参数,然后求偏微分:
BP算法就是求解偏微分的有效方式,具体介绍下回分解: