NLP降临在我身边 8

不敲代码强行完成任务…感觉有点丢人啊。但是不能坑掉,至少要先跟上。

前馈神经网络

前馈神经网络即Feedforward Neural Netword(FNN),在不同层中分布着神经元,信号只能顺序传递,无法倒转。整体来说,FNN分为输入层、隐藏层、输出层三种类型的层。
输入层传入的数据具有特征,这些特征被各层神经网络进一步处理后传递,每一个神经元都与下一层所有的神经元连接。反过来说,每一个神经元都能得到上一层所有神经元传来的信息,这些信息就是被处理过的特征。

感知机(Perceptron)

其实这个词让我很困扰…大家都说感知机是一种线性分类器,然而度娘又搜出PLA(线性感知机算法),既然都加了线性的限定,那么应该也有非线性…我也想不明白,姑且说一下自己知道的线性感知机。
感知机的核心思想是找到一个超平面,从而将数据二分类。这个超平面的方程是一大堆一次特征带个权重。感知机的学习方法是试错,先随便挑一个点,然后尝试矫正,最后得到一个性能最好的超平面。
感知机的局限性在于它只能进行对特征的线性组合。也就是说,如果数据线性不可分,感知机就无法找到完美分类的解。因此,如果线性可分的特征性能不够好,感知机的性能就会受限。在这种背景下,引入激活函数的概念。

激活函数

激活函数的用途是增强神经元对非线性特征的表示能力和学习能力。
激活函数给我的感觉是仿生性强,无论是多么奇形怪状的输入信息都能通过激活函数拍成一个特别娇小的形状。

  1. Logistic函数,Tanh函数
    对信息的挤压函数。可以理解为劫富济贫,虽然济贫没体现出来,劫富倒是实打实的:值越大,边际变动越小。这与生物上的特性很像。

2.ReLU函数(修正线性单元,Rectifiled Linear Unit)
能反映神经元兴奋状态的函数,相较于Sigmoid函数无论如何压缩都会残留一定的值相比,Relu函数能够把符合特定条件的神经元直接关闭,形成良好的稀疏性。
缺点在于可能导致神经元死亡。如果ReLU没有被恰当地激活,某一个被关闭的神经元可能这辈子都没办法再启动了。因此ReLU还有一些变种,用来避免神经元异常死亡的问题。

正则化

正则化的目的是通过限制模型复杂度而避免过拟合的方法。

L1正则化、L2正则化

对不起,看不懂。以后会补的。

数据集增强

当目标数据有限的情况下,可以通过数据增强(Data Augmentation)来根据既有数据创建更大的数据。以下简要列举几种增强方法:

  1. 旋转
  2. 反转
  3. 缩放
  4. 增加噪声

Early Stop

制作一个和训练集独立的样本集合,称为验证集。当模型测试验证集的错误率不再下降或下降不明显时,停止训练迭代。然而实际操作中,错误率变化并不一定只有一处极值,可能发生错误率连绵起伏的情况,届时需要根据实际情况进行调整。

Dropout层

第一次接触的时候就没有看懂。我强行写一点。
神经网络的神经元个数从某种程度上反映了模型的复杂度,因此可以通过随机Drop一些神经元的方式来降低模型复杂度,从而避免过拟合。

深度模型中的优化

参数初始化策略

学习过程使用的优化方法需要在初始状态时获取一个初始值,这个初始值当然可以全部填成0,但会导致不同层级的神经元之间没有区分性。虽然我不知道这样会导致什么后果,不过看样子挺严重的。
经常使用的初始化方法有Gaussian 分布初始化 和 Xavier 初始化方法。我觉得直接复制不太好,就劳烦各位自己查一下了。

自适应学习率算法

这里借鉴一下前辈组员的图,因为我只懂一点梯度下降的原理。这些部分会在后续学习中慢慢补上。(总感觉我需要再学一期 啊…)
AdaGrad、RMSProp、Adam;优化算法的选择

Batch norm, Layer norm

norm即归一化。在神经网络中,每一层都可以视为自我完整的一层,来自上一层的信息为输入,传向下一层的信息为传出。信息在传递过程中应该保持自身的不变性。然而神经网络的模型中,靠前的神经元如果发生了小的变动,体现在靠后的神经元时可能就是一个很大的变动。
因此,如果能够将不同层的输入信息norm处理,就可以使深层神经元避免受到放大的变动的影响。Batch norm为批量归一化,Layer norm为层归一化。详细的解释请参考其他文献,我先把作业交上去23333

猜你喜欢

转载自blog.csdn.net/weixin_44609088/article/details/89440660
8