全连接神经网络、卷积神经网络

全连接神经网络、卷积神经网络

  • 前言
  • 全连接神经网络
    • 介绍
    • 结构
    • 损失函数
    • 梯度下降
    • 链式法则
    • 反向传播
    • 总结
  • 卷积神经网络
    • 背景
    • 结构
    • 卷积(Convolution)
    • 池化(Max Pooling)
    • 激活机制
    • Example:风格迁移

前言

 
刚开始学习机器学习没多久,记录一下神经网络的知识。基于李宏毅老师的机器学习课程,图片和内容也是来自老师的课程笔记整理(科学上网,然后这里)。
 

全连接神经网络

 

介绍

 深度学习有三个步骤
全连接神经网络、卷积神经网络_第1张图片

选择一个合适的神经网络—>选择一个模型评估方法—>选择最优的函数

全连接神经网络,应该叫做全连接前馈神经网络(Fully Connect Feedforward Network),全连接(Fully Connect)指的是下一层每一个神经元都会与上一层的每一个神经元相连;而前馈(Feedforward)指的是输入信号进入网络后,信号流动是单向的,其间没有反馈。
 

结构

全连接神经网络、卷积神经网络_第2张图片
 
输入—>乘权重后加上偏差(线上的是权重,绿色格子内的是偏差)—>激活函数—>作为下一层输入
 
激活函数不止一种,Sigmoid函数值总是在0到1之间。

所以,可以把整个神经网络看成一个函数,权重和偏差就是函数参数,参数确定了,函数也就确定了。

而深度学习,意思是可以叠加很多层神经网络,形成深度。当然也不是都叠加全连接层了…

设多少层?每层几个神经元?对一个具体问题,需要尝试加直觉来调试,炼丹…
 

损失函数

用损失函数来判定模型好坏。
采用交叉熵(cross entropy)函数来对预测和目标,即 y y y y ^ \widehat{y} y 的损失进行计算,接下来就是调整参数,让交叉熵越小越好。
全连接神经网络、卷积神经网络_第3张图片
全连接神经网络、卷积神经网络_第4张图片
对于损失,我们不单单要计算一笔数据的,而是要计算整体所有训练数据的损失,然后把所有的训练数据的损失都加起来,得到一个总体损失 L L L。接下来就是在Function Set里面找到一组函数能最小化这个总体损失L,或者是找一组神经网络的参数 θ \theta θ,来最小化总体损失 L L L

如何找到最优的函数和最好的一组参数,方法是梯度下降。

全连接神经网络、卷积神经网络_第5张图片
全连接神经网络、卷积神经网络_第6张图片
 
这是用来更新权重的方法。应该是和反向传播结合在一起。计算损失函数对权重的偏导,然后权重-(学习率乘偏导值)。

在神经网络中计算损失最好的方法就是反向传播,我们可以用很多框架来进行计算损失,比如说TensorFlow,theano,Pytorch等等

全连接神经网络、卷积神经网络_第7张图片
 

梯度下降

 
比较重要的部分。
 
都是减梯度,所以不存在梯度上升的说法,沿着梯度反方向更新即可。
 
如下图
 
全连接神经网络、卷积神经网络_第8张图片

  • 给出参数 θ \theta θ (weight and bias)
  • 选择初始的 θ 0 \theta^0 θ0,计算 θ 0 \theta^0 θ0的损失函数对参数的偏微分。
  • 用这个偏微分的值乘学习率 η \eta η,减去这一个值更新参数。
     

链式法则

 
链式法则差不多就是从后往前时,可以一层一层求前面权重对于最终损失函数的梯度。如下图
 
全连接神经网络、卷积神经网络_第9张图片

 

反向传播

 

  • 损失函数时定义在单个训练样本上的,比如在分类问题中,则表示预测的类别和实际类别的区别。
  • 总体损失函数(Total loss function)是定义在整个训练集上的,所有误差的总和。也是反向传播所需要最小化的值。

 
全连接神经网络、卷积神经网络_第10张图片
L ( θ ) L(\theta) L(θ)是输出层每一个神经元的损失 l ( θ ) l(\theta) l(θ)的和。计算总损失的偏微分,只需要计算每个神经元损失的偏微分。
 
取出一个neuron进行分析
全连接神经网络、卷积神经网络_第11张图片
计算梯度分成两个部分

  • ​计算 ∂ z ∂ w \frac{\partial z}{\partial w} wz
  • 计算 ∂ l ∂ z \frac{\partial l}{\partial z} zl

Forward Pass部分计算:

全连接神经网络、卷积神经网络_第12张图片
 

Backward Pass 部分计算
 
全连接神经网络、卷积神经网络_第13张图片
全连接神经网络、卷积神经网络_第14张图片
全连接神经网络、卷积神经网络_第15张图片
 

总结

 
计算Forward Pass 和 Backward Pass部分以后,两部分相乘可得到梯度,使用梯度下降来寻找损失最小的函数。
 

全连接神经网络、卷积神经网络_第16张图片

卷积神经网络

 

背景

 
CNN(Convolutional Neural Network)主要用在图像处理上。
至于为什么提出CNN,可以举例说明比如一张 100 ∗ 100 100*100 100100的彩色图,Flatten后是 100 ∗ 100 ∗ 3 = 30000 维 100*100*3=30000维 1001003=30000,如果下一层有100个神经元,则有300万个参数,再传输到下一层…过于复杂。所以需要提出一个新的简化网络结构来处理这个问题。
 

在影像处理中有三个特点
 

  • 可以通过小区域的特点来识别图片。
     

全连接神经网络、卷积神经网络_第17张图片
 

  • 某一个特征在图片的不同位置出现。
     

全连接神经网络、卷积神经网络_第18张图片
 

  • 图片的尺寸变化不影响对图片的理解。

 
全连接神经网络、卷积神经网络_第19张图片

结构

全连接神经网络、卷积神经网络_第20张图片
 

首先输入一张image,经过多次卷积和池化以后,输入到全连接分类层。
 

全连接神经网络、卷积神经网络_第21张图片
 
基于影像处理的特点,设计网络结构。
 

卷积(Convolution)

全连接神经网络、卷积神经网络_第22张图片
 

6*6的Image是网络的输入,而Filter就是需要学习的参数。

每个Filter表示检测的某一个特征,这个Filter并不会一次查看整张图。
 

全连接神经网络、卷积神经网络_第23张图片
 

然后根据步长移动Filter,和图像的值做内积,得到结果。
 

全连接神经网络、卷积神经网络_第24张图片
 

多个Filter得到的矩阵叠在一起形成特征图。
 

全连接神经网络、卷积神经网络_第25张图片
 

如果是彩色图,Filter的深度和输入保持一致。

 
全连接神经网络、卷积神经网络_第26张图片

 
将filter的9个值和image的9个值做内积(不是把每一个channel分开来算,而是合在一起来算,一个filter就考虑了不同颜色所代表的channel),内积然后相加,得到一个值。

convolution就是fully connected layer把一些weight拿掉了。经过convolution的output其实就是一个hidden layer的neural的output。如果把这两个link在一起的话,convolution就是fully connected拿掉一些weight的结果。

 

全连接神经网络、卷积神经网络_第27张图片
 

滑动一次则表示一个新的神经元。
 

全连接神经网络、卷积神经网络_第28张图片

 
其实相当于每次只考虑输入的一部分,即识别某个pattern,以此形成多个神经元。
 

池化(Max Pooling)

全连接神经网络、卷积神经网络_第29张图片
全连接神经网络、卷积神经网络_第30张图片

 
在输出,选择某个范围,保留最大值
 

全连接神经网络、卷积神经网络_第31张图片
全连接神经网络、卷积神经网络_第32张图片

 
做完一个convolution和一次max pooling,就将原来6 * 6的image变成了一个2 *2的image。这个2 *2的pixel的深度depend你有几个filter(你有50个filter你就有50维),得到结果就是一个new image but smaller,一个filter就代表了一个channel。
 

全连接神经网络、卷积神经网络_第33张图片
全连接神经网络、卷积神经网络_第34张图片
flatten就是feature map拉直,拉直之后就可以丢到fully connected feedforward netwwork,然后就结束了。

用的时候,框架已经把以上内容都做好了,只需要确定每层的参数。
 
如下一些例子
 
全连接神经网络、卷积神经网络_第35张图片
全连接神经网络、卷积神经网络_第36张图片
全连接神经网络、卷积神经网络_第37张图片

激活机制

 
全连接神经网络、卷积神经网络_第38张图片
 
人为定义一个激活机制,比如,使Filter的输出的和最大,则称这个Filter被激活了。那么,每个Filter的任务就是,找到一张图片,使得它被激活了。
 
下面找一下池化以后,使得50个Filter激活的图片。取其中12个看看。
 
全连接神经网络、卷积神经网络_第39张图片
 
差不多是每个Filter在找一个pattern的意思。
 

再看全连接层
 

全连接神经网络、卷积神经网络_第40张图片
 
这里可以看到,似乎又不是上面的纹路一样了。因为这一层实际上综合了之前的多个Filter的信息,拼在了一起。越到后面所寻找的pattern越综合,这就是比较巧妙的地方。(直到最后,找出整张图大小的pattern,相当于完成了图像识别的任务)
 

但是有些时候,可能计算机识别的和人所识别的不太一样。

比如手写数字识别,如果最后结果是这样
 

全连接神经网络、卷积神经网络_第41张图片
 

这个和我们想的不一样。可以根据实际情况加入一个修正项,这里是把所有pixel的值加起来,要求笔画(设为1)的地方尽可能小。
 

全连接神经网络、卷积神经网络_第42张图片

 
至此介绍完了激活机制。
 

Example:风格迁移

 
恰好参加了一个项目里面有别人写风格迁移的功能。看了一下似乎也是这个意思:
 

全连接神经网络、卷积神经网络_第43张图片

 
相当于让原图和style一起输入以后,让CNN激活。两部分对激活都有贡献。

 
到此结束。

你可能感兴趣的:(机器学习基本知识,神经网络,cnn,深度学习)