Deep Learning 的前世今生
step1:define a set of function
定义一个function 这个function其实就是neural network
每个Logistic Regression 的weights 和 biases 的参数合在一起就是Network parameter。
我们可以用不同的方法来连接这些Neuron,这些是需要你手动设计的。
最常见的连接方式:Fully Connect Feedforward Network
你把你的Neuron 排成一排一排的
一个Neuron 就是一个一个function:input vector,output vector
Given network structure ,define a function set。
所谓的Deep = Many hidden layers
network 的运作我们常常会用Matrix Operation来表示。
所有的 weight 集合起来当做Matrix W;bias 全部集合起来 当做Matrix b;
所有的input x接起来当做 matrix x(因为可以用GPU 对矩阵运算加速)
例:手写辨识问题
接下来你要做的事情就是用Gradient Descent去找一组参数,去挑一个最适合拿来做手写数字辨识的function。
之前在做Logistic Regression 或是Linear Regression的时候我们对model 的structure 是没用什么好设计的。
但对neural network 来说我们现在唯一的constraint 只能是input 是256维,output 是10维。但中间要有一个hidden layer ,每个hidden layer 要有多少的neuron 是需要自己决定的。
? Q: How many layers? How many neurons for each layer?
? Trial and Error + Intuition
找network structure 这件事,并没有那么容易,有时是蛮困难的甚至需要一些domain knowledge。
所有从非DL 方法到 DL的方法,我并不认为machine learning真的变得比较简单。而是我们把一个问题转化成另一个问题。
不是deep的model,我们要得到好的结果,往往需要做Feature Engineering ,然后找一组好的feature。
但是如果今天是做deep learning 的时候,你往往不需要找到好的feature。
比如说做影像辨识的时候,你可以直接把pixel丢进去
但是今天的deep learning 制造了一个新的问题,你需要design network 的structure,所以你的问题由如何抽feature 转化成怎么抽 怎么design network structure。
deep learning 是不是真的好用就取决于你觉得那一个问题比较容易。
个人觉得如果是语音辨识或是影像辨识的话design network structure可能比Feature Engineering 容易。因为虽然说我们人都会看,听,但这件事情它太过潜意识了,他离我们的意识的层次太远,我们其实不知道我们到底是怎么做语音辨识这件事情。所以对人来说你要抽一组好的feature 让机器可以很方便的用linear的方法做语音辨识这件事对人来说很难,因为根本不知道好的feature 长什么样子。所以还不如design一个 network structure让machine 自己去找出好的feature,这件事情反而变得比较容易。(对人类而言,语音辨识这个函数是黑盒封装的)
有没有听过一个说法:“ deep learning 在NLP上面performance 没有那么好”。
用在NLP上,进步量似乎没有影像辨识那么惊人,甚至很多NLP的人,现在仍然认为deep learning 不见得那么work。
我自己的猜想这个原因可能是,人在做NLP这件事情,比如文字处理来说人是比较强的。比如说让你设计一个rule detect 说一篇document它是正面的情绪,还是负面的情绪,你可以列一些正面情绪的词汇跟负面情绪的词汇然后看这个document里面,正面情绪的词汇出现的百分比,你可能就可以得到一个不错的结果。
NLP这个task,对人来说比较容易设计rule 往往可以给你一个还不错的结果。
就长久而已,因为文字处理其实也是很困难的问题,有很多细小的资讯可能是人自己都不知道的,所有就长久而言,deep learning 让machine自己去学这件事还是可以占到一些优势的。只是一下子,眼下看起来进步没有那么显著,它跟传统方法比起来的差异就没有那么惊人。
? Q: Can the structure be automatically determined? ? E.g. Evolutionary Artificial Neural Networks
? Q: Can we design the network structure?
? Convolutional Neural Network(一个特殊的接法)
step2:goodness of function
在neural network里面怎么定义一组参数它的好坏呢?
计算y和 target 之间的cross entropy
把所有data的cross entropy全部sum起来得到一个total loss,L
step3:pick the best function
然后在function set里面找一个function,它可以minimize这个total loss或者是找一组
network的parameter θ*。
怎么找这个 θ* 呢?
用的方法就是Gradient Descent。
|