Three Steps for Deep Learning

Step 1. A neural network is a function compose of simple functions (neurons)
神经元=simple fcn
神经网络=fcn
    通常需要自己决定网络的structure,and let machine find parameters from data.
    所以我们要focused 就是有哪些常见的structure.
Step 2. 定好structure和para后就要定cost function——什么样的network参数是好的?什么样的network的参数又是不好的?那么如何定cost fcn呢?
    那当然是case by case,取决于你要处理的问题和你手上的data(训练数据)
Step 3. 有了上面两个步骤之后,我们就用gradient descent(梯度下降)找到一个最好的fcn

接下来开头课程的outline

B站学习法之深度学习笔记一

1.Fully connected layer(全连接层)

1.1关于全连接层的浅显理解

对全连接层的理解参考了这篇原创文章[link]https://blog.csdn.net/m0_37407756/article/details/80904580
理解:例如经过卷积,relu后得到3x3x5的输出。
那它是怎么样把3x3x5的输出,转换成1x4096的形式?
B站学习法之深度学习笔记一
很简单,可以理解为在中间做了一个卷积。

B站学习法之深度学习笔记一
从上图我们可以看出,我们用一个3x3x5的filter 去卷积**函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,这个输出就是一个值。因为我们有4096个神经元。我们实际就是用一个3x3x5x4096的卷积层去卷积**函数的输出。

以VGG-16再举个例子吧,

对224x224x3的输入,最后一层卷积可得输出为7x7x512,如后层是一层含4096个神经元的FC,则可用卷积核为7x7x512x4096的全局卷积来实现这一全连接运算过程。

它把特征representation整合到一起,输出为一个值。

那么全连接层这样做,有什么好处?
好处就是大大减少特征位置对分类带来的影响,不能理解?没关系,继续举例理解:
举个简单的例子:
B站学习法之深度学习笔记一
从上图我们可以看出,猫在不同的位置,输出的feature值相同,但是位置不同

对于电脑来说,特征值相同,但是特征值位置不同,那分类结果也可能不一样。所以为了避免上图中Feature Map的位置不同引起电脑分类不一样的后果,全连接层filter的作用就相当于告诉电脑——

喵在哪我不管,我只要喵,于是我让filter去把这个喵找到,实际就是把Feature map 整合成一个值,这个值大,有喵,这个值小,那就可能没喵,和这个喵在哪关系不大了,鲁棒性有大大增强。

在实际使用当中,全连接层中一层的一个神经元可以看成一个多项式,我们用许多神经元去拟合数据分布。但是只用一层fully connected layer 有时候没法解决非线性问题,那么如果有两层或以上fully connected layer就可以很好地解决非线性问题了

再举一个例子说明很好地解决非线性问题:
我们都知道,全连接层之前的作用是提取特征

全连接层的作用是分类

我们现在的任务是去区别一图片是不是猫
B站学习法之深度学习笔记一
假设现在神经网络模型已经训练完了,全连接层已经知道了,并表示:当我们检测到以下特征时,我就可以判断这个东东是猫了。B站学习法之深度学习笔记一
因为全连接层的作用主要就是实现分类Classification

从下图,我们可以看出
B站学习法之深度学习笔记一
红色的神经元表示这个特征被找到了(**了)
同一层其他神经元,要么猫的特征不明显,要么没找到
当我们把这些找到的特征组合在一起后发现最符合要求的是猫——ok,我认为这是猫了。

再比如说区别猫头:
B站学习法之深度学习笔记一
道理和区别猫一样
当我们找到这些特征,神经元就被**了(上图红色圆圈)

注:这些细节特征又是怎么来的?——是从前面的卷积层下采样层来的

全连接层参数特多(可占整个网络参数80%左右),那么全连接层对模型影响参数就是三个:

  1. 全连接层的总层数长度
  2. 单个全连接层的神经元数宽度
  3. **函数
    其中,**函数暂时先明白他的作用是
    B站学习法之深度学习笔记一
        以上,从全连接层的好处(减少特征位置对分类带来的影响)+全连接层的作用(分类)+全连接层对模型影响的主要参数进行了十分浅显且不知道恰不恰当的举例,对Fully connected layer有了粗浅的了解。

1.2关于全连接层的浅显理解

    第ll层有N个Nodes,均对用一个output:aila^l_i,其中ii代表第ll层的第ii个神经元的输出
    把一层layer中的所有output集合起来——就组成了一个vector向量,用ala^l代表第ll层的输出向量。
B站学习法之深度学习笔记一

    FCL中的每个layer都是两两相接的,那neurons和neurons之间的connection有一个weight——wijlw^l_{ij}
其中,上标表示这个连接了第l-1个layer和第l个Layer;下标是指这个weight连接了第l1l-1个layer的第jj个neuronaja_j连接到(箭头指向)第ll个layer的第ii个neuron.(jj在左边,ii在右边)
B站学习法之深度学习笔记一

    依次类推,两两neurons之间就有一个weight,由此排成一个矩阵WlW^l.第一个index(即ii)指的是row,第二个index(即jj)指的是column.从而WlW^l的row行的个数就是NlN_l(节点数),WlW^l的column列的个数就是Nl1N_{l-1}(节点数)
(注:第一个index指的是上图的input layer,第二个index指的是上图的output layer)
B站学习法之深度学习笔记一
    那么,现在就构造了一个matrix将所有的weight全都表示。上标ll表示第l1l-1和第ll层的weight_matrix.
    除了weight以外,每个neuron还有一个bias.(我们可以把bias想象成weight的一部分,只是需要在input的地方多加一个1(如下图所示的1,并将1视为是weight的一部分),所以有些书就没有给出bias图线的部分)将这些bias全部穿起来成一个vector,用blb^l表示第ll个layer组成的bias的vector.
B站学习法之深度学习笔记一
接下来我们要算aila^l_i,即第ll个layer的第ii个neuron的outputaila^l_i,和前一层l1l-1对应的outputajl1a^{l-1}_j有什么样的关系。
在计算上面这个关系之前,我们必须先计算zilz^l_i(input of the activation function for neuron i at layer l),同样,我们用zlz^l表示layer l1l-1到layer ll的所有zilz^l_i构成的vector.
zilz^l_i与他前面层所有的output的关系式
zil=wi1la1l1+wi2la2l1+...+bilz^l_i=w^l_{i1}a^{l-1}_1+w^l_{i2}a^{l-1}_2+...+b^l_i
(即前一层各个neuron的output乘上对应的weight后再加上最后1发出的bias,wi1lw^l_{i1}表示前层的第1个neuron到后层第i个neuron对用的权重)
B站学习法之深度学习笔记一
    现在考虑ll一整个layer的output,那就要考虑al1a^{l-1}ala^l之间的关系,但是计算他们关系这之前,要先计算一下zlz^lal1a^{l-1}的关系。
B站学习法之深度学习笔记一
    如果ij相反的话,即index反过来,那就要将WlW^l加转置transport。
以上计算了ZlZ^lal1a^{l-1}的关系,那接下来要计算ZlZ^lala^l的关系,从而得到al1a^{l-1}ala^l的关系。
    我们假设ZlZ^lala^l有映射函数σ\sigma满足:
ail=σ(zil)a^l_i=\sigma(z^l_i)
从而建立一竖排z和一竖排a的关系:
B站学习法之深度学习笔记一
    那么整理上面三个式子,可以得到layer与layer的输出关系:
B站学习法之深度学习笔记一

2. Recurrent Structure(RS)

    把同一个structure反复使用就叫RS…
    因为我们需要的不同种类的段并不会因为input的长度而改变,我们需要的参数量永远都是一样的。
B站学习法之深度学习笔记一

1.1 RNN

有一个fcn,输入是两个vector:input:(h,x)(h,x),输出也是两个vector:KaTeX parse error: Expected group after '^' at position 3: (h^̲',y)
(图中上标表示one、two),要特别注意设计时hhhh'(即图中的h0h^0h1h^1)它们两个的dimension是一样的,你才能够把他们堆LEGO一样堆到一起。像这样依次类推,新的ff吃前面一个ff的output,再产生一个新的yy.所以只要保证dimension一致,针对MIMO我们只需要同一个ff就可以产生无限的input/output。
B站学习法之深度学习笔记一
    注:如果我们用feedforward network解这个问题,input x1,x2,x3;output y1,y2,y3.那么当然可以做得到——把x1,x2,x3接起来拼成一个比较长的sequence,再丢到feedforwardnetwork里面,让它吐一个比较长的y1y2y3,但是如果sequence非常长,这时候将x1~x100都拼起来,那这个前馈神经网络它至少在input_layer的地方要很大才能吃的下——参数一多就会导致overfitted(过拟合)
    所以RNN的好处就是便于处理序列,因为它需要很少的参数就能处理这样的问题。

1.2 Deep RNN

    在RNN的基础上,引入一个新的fcn:
b,c=f2(b,y)b',c=f_2(b,y)
注意f2的输入输出向量的维度与
h,y=f1(h,x)h',y=f_1(h,x)
向量维度上满足:
dimension(h)=dimension(h)dimension(h')=dimension(h)
dimension(b)=dimension(b)dimension(b')=dimension(b)
且这里两个函数的yy是同一个东西
B站学习法之深度学习笔记一

1.3 Bidirectional RNN (双向RNN)

    引入第三个function,a,ca,cf3f3的input vector,f3f3存在的目的就是使得f1与f2的output合在一起.
B站学习法之深度学习笔记一

1.4 Pyramidal RNN (金字塔RNN)

    首先每层塔的白框均代表一个function所形成的MIMO系统,且可以观察到同层的白框两两之间的双向箭头就表示两者相互构成Bidirectional RNN.这是W.Chan用Sequence2Sequence硬做一个语音辨识的网络。因为语音辨识一般是input:Sequence,然后output 一个 character sequence.所以这里就硬train下去,并在paper说这样做真的可以语音辨识。在Paper中提到了一个很重要的trick:让Seq2Seq能做出来的原因
第二层的每个block吃前面一个层的几个layer的好几个output,随着Deep的RNN越来越深,那么迭代得到的Sequence就越来越短。
B站学习法之深度学习笔记一
    但是每一个block运算量变多了,运算量会不会变复杂?其实从平行运算的角度看,一个Seq是没有办法平行运算的,但是一个block却可以实现平行运算。

1.5ff长什么样子?(以最Naive的RNN为例)

    将输入的hh'xx分别乘上对应的weight matrix并相加, 代入sigmoid function中便得到输出hh'.;。如果要得到yy,同样如图所示。
    r如果yy是最后的layer,同时希望output是激励的话,可以加一个softmax function.
B站学习法之深度学习笔记一
注:上面的naive就表示一个最简单的RNN。

1.6 LSTM (Long Short Term Memory长短时记忆网络)

    如果从block的角度看,LSTM长的和naive的RNN一样,有一个input xx,然后naive RNN 有一个inputhh,有一个outputhh,这个outputhh就是要去连接其他的RNN的。那么在LSTM里面,它的input有两个要卡死的vector——ct1c^{t-1}ht1h^{t-1},然后outputctc^{t}hth^{t}去接其他的LSTM.
    总而言之,LSTM比naive RNN多了一个输入向量,从SISO变成了MIMO。
    但区别就在LSTM的c和h扮演了不同的角色。c的变化很慢,ct1c^{t-1}加了一些什么(**函数)才变成ctc^{t};从而不同于h vector,这使得c可以记得比较过去的一些info**(慢的c是剧情主线,快的h是每集剧情)**。
B站学习法之深度学习笔记一

1.6.1 LSTM 架构

    把x和h并在一起变成一个比较长的vector,再乘上一个weight matrix,再取一个activation function**函数(如这里的tanh),得到zz。这里其实可以把WW拆成W1W2W1,W2
W1xt+W2ht1=W(xt+ht1)W_1x^t+W_2h^{t-1}=W(x^t+h^{t-1})
    同样地取不同weight matrix和不同的**函数,可以得到不同的zi,zf,zoz^i,z^f,z^o…从而对同一个vector乘上不同的weight matrix可以得到四个不同的z vector.(四个输入门)
    所以如果能够把四个weight matrix合并成一个打矩阵,就可以四个部分并行计算了。

B站学习法之深度学习笔记一
接下来c有什么作用呢?把c也加入到x和h组成的vector中,这个过程称为peephole
将W分成三部分对应乘x,h,c如下图所示,分别乘对应的weight matrixW1W_1 W2W_2 W3W_3
通常强制乘c的矩阵为diagonal对角矩阵
B站学习法之深度学习笔记一
那么有了这四个vector,接下来我们要做的就是将z与ziz^i相乘,把ct1c^{t-1}zfz^f相乘(向量乘法——对应元素element逐个相乘)
将两部分相乘的结果相加,(这里ziz^i就是input gate,决定z的information能不能留进去,zfz^f就是forget gate,决定cc的memory能不能够被传到下一个时间点),相加之后就得到下一个时间点的outputctc^t
这里c是细胞状态cell的缩写,f是forget门的缩写
ctc^t取双曲hyperbolic函数并与zoz^o相乘,得到outputhth^t
最后将hth^t乘一个matrix再取sigmode function得到yty^t
B站学习法之深度学习笔记一
接下来将LSTM和RNN一样作为一个block使用,将c,h作为block之间的input/output,element size规则不变…从而得到ct+1yt+1,ht+1c^{t+1},y^{t+1},h^{t+1}
B站学习法之深度学习笔记一

1.7 GRU (Gated Recurrent Unit)

与naive RNN相比GRU的input和output在外观上一样,但是内部与LSTM一样。
把h与x并在一起,再通过weight matrix送入sigmode function得到r(reset gate)
r=σ(W(ht1xt))r=\sigma(W(h^{t-1}x^{t}))
同样更换不同的weight matrix得到zz

rrht1h^{t-1}并在一起得到的某个vector再与xtx^t这个vector乘第三个matrix得到东西并在一起得到hth^t
B站学习法之深度学习笔记一
再将两向量zzht1h^{t-1}做element wise 相乘得到A
再将1z1-zhth^{t}做element wise 相乘得到B
B站学习法之深度学习笔记一
再A+B,得到hth^t,再将hth^t乘上一个matrix(灰色大箭头,这里不同颜色的大箭头表示不同的matrix)得到yty^t
B站学习法之深度学习笔记一

1.8 GRU与LSTM

LSTM有四个Matrix,GRU有三个Matrix(这块暂时没算上灰色大箭头代表的matrix),所以GRU用的参数比LSTM少,从而不容易overfitted.
B站学习法之深度学习笔记一
LSTM是先f(忘记),然后再i和z(进行更新cell),然后output进行输出。

相关文章:

  • 2021-12-18
  • 2021-07-24
  • 2021-07-09
  • 2021-06-27
猜你喜欢
  • 2022-01-20
  • 2021-12-21
  • 2021-09-03
  • 2021-12-02
  • 2021-12-02
相关资源
相似解决方案