Machine Learning —— Deep Learning

本文介绍深度学习中的神经网络概念及应用,包括全连接前馈网络的工作原理、矩阵运算的优化方式、多层神经网络的设计步骤等。以手写数字识别为例,展示了如何利用神经网络进行特征提取与分类。

Machine Learning —— Deep Learning

Ups and downs of Deep Learning

Three Steps for Deep Learning

在这里插入图片描述

Neural Network

concept

把多个Logistic Regression前后connect在一起,把一个Logistic Regression称为neuron,整个称为neural network
在这里插入图片描述
neural network里的每一个Logistic Regression都有自己的weight和bias,这些weight和bias集合在一起,就是整个network的parameter,用 θ \theta θ表示

Fully Connect Feedforward Network(全连接前馈网络)

最常见的连接方式是Fully Connect Feedforward Network,如果一个neural network的参数weight和bias已知的话,它就是一个function

  • 它的input是一个vector,output是另一个vector
  • 这个vector里面放的是样本点的feature,vector的dimension就是feature的个数
    在这里插入图片描述
    下图中,每一排表示一个layer,每个layer里面的每一个球都代表一个neuron
  • layer和layer之间neuron是两两互相连接的,layer 1的neuron output会连接给layer 2的每一个neuron作为input
  • 对整个neural network来说,它需要一个input,这个input就是一个feature的vector,而对layer 1的每一个neuron来说,它的input就是input layer的每一个dimension
  • 最后那个layer L,由于它后面没有接其它东西了,所以它的output就是整个network的output
  • 每一个neuron里面的sigmoid function,在Deep Learning中被称为activation function(激励函数),事实上它不见得一定是sigmoid function,还可以是其他function
  • 有很多层layers的neural network,被称为DNN(Deep Neural Network)

在这里插入图片描述
因为layer和layer之间,所有的neuron都是两两连接,所以它叫Fully connected的network;因为现在传递的方向是从layer 1->2->3,由后往前传,所以它叫做Feedforward network

Matrix Operation

network的运作过程,我们通常会用Matrix Operation来表示,以下图为例

  • 假设第一层hidden layers的两个neuron,它们的weight分别是 w 1 = 1 , w 2 = − 2 , w 1 ′ = − 1 , w 2 ′ = 1 w_1=1,w_2=-2,w_1^{'}=-1,w_2^{'}=1 w1=1,w2=2,w1=1,w2=1,可以将它们排成一个matrix
  • input是一个2*1的vector,将w和x相乘,加上bias的vector,就可以得到这一层的vector z
  • 经过activation function得到这一层的output
    σ ( [ 1 − 2 − 1 1 ] [ 1 − 1 ] + [ 1 0 ] ) = σ ( [ 4 2 ] ) = [ 0.98 0.12 ] \sigma( \begin{bmatrix} 1& -2\\ -1&1\\ \end{bmatrix} \begin{bmatrix} 1\\ -1\\ \end{bmatrix}+ \begin{bmatrix} 1\\ 0\\ \end{bmatrix})= \sigma( \begin{bmatrix} 4\\ 2\\ \end{bmatrix})= \begin{bmatrix} 0.98\\ 0.12\\ \end{bmatrix} σ([1121][11]+[10])=σ([42])=[0.980.12]
    在这里插入图片描述
    把这件事情写成矩阵运算的好处是,可以用GPU加速,GPU对matrix的运算是比CPU要来的快的,所以我们写neural network的时候,习惯把它写成matrix operation,然后call GPU来加速它
    在这里插入图片描述
    在这里插入图片描述
Output layer

我们可以把hidden layers看做是一个feature extractor(特征提取器),这个feature extractor就replace了我们之前手动做feature engineering,feature transformation这些事情,经过这个feature extractor得到的 x 1 , x 2 , x 3 , . . . , x k x_1,x_2,x_3,...,x_k x1,x2,x3,...,xk可以被当做一个新的feature
在这里插入图片描述
output layer可以当做一个Muli-class Classifier,它对经过feature extractor转换后的一组比较好的feature进行分类

Example Application

Handwriting Digit Recognition

这里举一个手写数字识别的例子,input是一张image,对机器来说一张image实际上就是一个vector,假设这是一张16*16的image,那它有256个pixel,对machine来说,它是一个256维的vector,image中的每一个都对应到vector中的一个dimension,简单来说,我们把黑色的pixel的值设为1,白色的pixel的值设为0

Neural network的output如果在output layer使用了softmax,那么它的output就是一个突出极大值的Probability distribution,假设我们的output是10维的话(10个数字,0~9),这个output的每一维都对应到它可能是某一个数字的几率,实际上这个neural network的作用就是计算这张image成为10个数字的几率各自有多少,几率最大(softmax突出极大值的意义所在)的那个数字,就是机器的预测值
在这里插入图片描述
在这个手写字体识别的demo里,我们唯一需要的就是一个function,这个function的input是一个256的vector,output是一个10维的vector,这个function就是neural network(这里我们用简单的Feedforward network)

  • input固定为256维,output固定为10维的feedforward neural network,实际上这个network structure就已经确定了一个function set(model)的形状
  • 在这个function set里的每一个function都可以拿来做手写数字识别,接下来我们要做的事情是用gradient descent去计算出一组参数,挑一个最适合拿来做手写数字识别的function

input、output的dimension,加上network structure,就可以确定一个model的形状,其中Deep Learning最关键的就是design这个network的structure

之前在做Logistic Regression或者是linear Regression的时候,我们对model的structure是没有什么好设计的,但是对neural network来说,我们现在已知的constraint只有input是256维,output是10维,而中间要有几个hidden layer,每个layer要有几个neuron,都是需要我们自己去设计的

Step1:Neural Network

在这里插入图片描述

Step2:Goodness of function

定义一个function的好坏,由于现在我们做的是一个Multi-class classification,所以image为数字1的label “1”告诉我们,现在的target是一个10维的vector,只有在第一维对应数字1的地方,它的值是1,其他都是0
在这里插入图片描述
input这张image的256个pixel,通过这个neural network之后,会得到一个output,称之为y;而从这张image的label中转化而来的target,称之为 y ^ \hat{y} y^,有了output和target之后,我们就计算两者之间的cross entropy(交叉熵):

C r o s s E n t r o p y : l ( y , y ^ ) = − ∑ i = 1 1 0 y ^ i l n y i Cross Entropy:l(y,\hat{y})=-\sum\limits_{i=1}^10\hat{y}_ilny_i CrossEntropy:l(y,y^)=i=110y^ilnyi

Step3:Pick the best function

调整参数,使得cross entropy越小越好,我们需要把所有data的cross entropy都sum起来,得到一个total loss L = ∑ n = 1 N l n L=\sum\limits_{n=1}^Nl^n L=n=1Nln,找出一组network的parameter θ ∗ \theta^* θ,可以minimize这个total loss,这组 θ ∗ \theta^* θ就是我们最终要找的model
在这里插入图片描述
找使total loss minimize的 θ ∗ \theta^* θ的方法就是Gradient Descent,现在的 θ ∗ \theta^* θ是一大堆的weight、bias参数

  • 先random找一个初始值,接下来去计算每一个参数对total loss的偏微分
  • 把这些偏微分全部集合起来,就叫做gradient
  • 有了这些偏微分以后,更新所有的参数,都减掉learning rate乘上偏微分的值
  • 这个process反复进行下去,最终找到一组好的参数,就做完deep learning的training
    在这里插入图片描述

Why Deep?

因为本来model的parameter越多,它cover的function set就越大,它的bias就越小,如果今天你有足够多的training data去控制它的variance,一个比较复杂、参数比较多的model,它performance比较好,是很正常的

有一个理论是这样说的,任何连续的function,它input是一个N维的vector,output是一个M维的vector,它都可以用一个hidden layer的neural network来表示,只要你这个hidden layer的neuron够多,它可以表示成任何的function,既然一个hidden layer的neural network可以表示成任何的function,而我们在做machine learning的时候,需要的东西就只是一个function而已

在这里插入图片描述
从非deep learning的方法到deep learning的方法,并不是说machine learning比较简单,而是我们把一个问题转化成了另一个问题

本来不是deep learning的model,要得到一个好的结果,往往需要做feature engineering(特征工程),也就是做feature transform,然后找一组好的feature;一开始学习deep learning的时候,好像会觉得deep learning的layers之间也是在做feature transform,但实际上在做deep learning的时候,往往不需要一个好的feature ,比如说在做影像辨识的时候,你可以把所有的pixel直接丢进去,但是在过去做图像识别,你是需要对图像抽取出一些人定的feature出来的,这件事情就是feature transform,但是有了deep learning之后,你完全可以直接丢pixel进去硬做

但是,今天deep learning制造了一个新的问题,它所制造的问题就是,你需要去design network的structure,所以你的问题从本来的如何抽取feature转化成怎么design network structure

参考

https://sakura-gh.github.io/ML-notes/ML-notes-html/8_Deep-Learning.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值