神经网络知识
神经网络
基本原理
神经网络是一种模仿人脑工作原理的计算模型,它由大量的基本单元节点(神经元)组成,这些节点通过层次化的方式组织成输入层、隐藏层和输出层。每个节点都与其他节点通过权重连接,并且每个节点都有一个激活函数,用于决定该节点是否被激活。隐藏层连接输入层与输出层,对输入信息进行非线性变换来处理信息,输出层也即预测结果。
直观的示意:
激活函数、权重、偏执
参照上图a9
常用的激活函数包括Sigmoid、ReLU(Rectified Linear Unit)、tanh等来引入非线性因素
双曲正弦函数:tanh(x)
softmax是另一个常用的激活函数,特别是在多分类问题的输出层。它的主要作用是将一个K维的实数向量转换成另一个K维的实数向量,Softmax函数的输出可以被解释为概率分布,用于表示输入数据属于各个类别的可能性。
权重(w):连接不同神经元的强度,表示输入信号的重要性,偏置(b):调整神经元激活阈值
W下标对应的权重参数也就是大部分神经网络类模型用于学习的最重要参数,搞来搞去就是为了一个学到位训到位调到位的权重矩阵参数
前向传播与反向传播、损失函数
在前向传播过程中,输入数据依次通过各个层次,直到产生输出。这个过程涉及计算每层神经元的激活值
损失函数衡量模型预测值与实际目标值之间的差异。训练神经网络的目标是最小化这一差异,随机过程中的均方误差就是一个简单的例子
交叉熵也是一种损失函数,用于衡量模型预测的概率分布与真实标签分布,值越小越准确,相比于均方误差对于梯度消失问题也有帮助。
反向传播是一种高效的优化方法,它根据损失函数的梯度更新网络中的权重和偏置,以减小误差。这涉及到链式法则的应用,以便逐层计算梯度。
过拟合和正则技术
损失函数存在过拟合等问题,模型在测试集或实际应用中无法保持训练时的良好性能,因为它过于特定于训练数据。
表现为只在训练数据上优秀, 但是在新数据、新模型上的泛化能力差,预测能力差。通常出现在模型过于复杂或者训练数据量相对不足的情况下。
正则化通过在损失函数中添加额外的惩罚项来限制模型复杂度,使得模型不会过度适应训练数据中的噪声或异常值,从而提高模型的泛化能力。以下是几种常见的正则化技术:
L1 正则化(Lasso)通过向损失函数中添加一个等于模型参数绝对值之和的惩罚项。这个惩罚项鼓励模型参数尽可能多地变为零,从而实现特征选择的效果,即只保留那些对预测有贡献的特征。
L2 正则化则是向损失函数中添加一个等于模型参数平方和的惩罚项。L2 正则化倾向于使所有参数都较小但不为零,这有助于减少参数间的共线性问题,并且可以使模型更加稳定。
弹性网络结合了 L1 和 L2 正则化的优点,它在损失函数中同时加入 L1 和 L2 的惩罚项。既可以通过 L1 进行特征选择,又可以通过 L2 减少参数大小并处理多重共线性。
深度学习
基本原理
深度学习是指使用多层(深层)神经网络架构来进行机器学习的方法。所谓“深”,指的是网络中有较多的隐藏层,能够捕捉更复杂的模式。深度学习的一个显著特点是它可以自动地从原始数据中学习到有用的特征表示,不同于传统机器学习的手工提取。
经典的神经网络如多层感知器MLP(Multi-Layer Perception),SPSSAU默认使用该模型。其它的机器学习模型(比如决策树、随机森林、支持向量机SVM等)
深度学习和神经网络
可以说,所有的深度学习模型都是基于神经网络构建的,但并非所有神经网络都是深度学习模型。深度学习特别强调使用深层次的网络结构,并结合先进的训练技术和工具,如卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆网络(LSTM)等
TODO 待扩展新的激活函数、正则化技术、优化算法
BP神经网络
基本原理
BP神经网络是一种监督学习算法,它通过最小化预测输出与实际目标之间的误差来调整网络参数。
基本原理是利用反向传播算法对网络进行训练。在训练过程中,首先将输入数据送入网络,通过网络的前向传播计算输出。如果输出与期望值之间存在误差,就通过反向传播算法将误差反向传播回网络,并对权重和偏置进行调整,以减少误差。
应用于分类、回归、模式识别等领域。由于其结构简单,易于实现,因此在很多传统机器学习任务中都有应用。然而,BP神经网络在处理高维数据时容易遇到梯度消失或梯度爆炸的问题,导致训练困难
存在问题
梯度
方向导数:在某点沿着某个向量方向上的方向导数,描绘了该点附近沿着该向量方向变动时的瞬时变化率。这个向量方向可以是任一方向。
梯度(多元函数全部偏导数构成的向量):方向导数最大的方向的向量,故梯度方向是找增长速率最大的方向,梯度的反方向是减小速率最大的方向,垂直于梯度的方向变化速率为0的且梯度的模长=方向导数(速率),梯度的大小就代表该方向的变化率。
梯度向量的零点就是找驻点,极值。
梯度消失
梯度为0若干层就失去学习效果了,找不到最优解了。在反向传播过程中,需要对激活函数进行求导,如果导数小于1,那么随着网络层数的增加,梯度更新信息会以指数形式衰减,最终导致梯度消失。该现象会导致靠近输入层的隐藏层学习非常缓慢,甚至几乎不学习,这会导致整个网络的训练效果大打折扣。具体表现为靠近输入层的隐藏层权值几乎不变,网络的整体学习效果等价于只有后几层的隐藏层在学习。
可以使用归一化、门控机制lstm等解决这个问题
梯度爆炸
深度神经网络训练过程中,梯度值变得非常大,超出了网络的处理范围,导致权重更新变得不稳定甚至不收敛的现象。梯度爆炸通常发生在深层神经网络中,尤其是在网络层数较多、结构复杂时更容易出现。
可以使用批量归一化、门控机制lstm等解决这个问题
卷积神经网络(CNN)
包含卷积运算且具有深度结构的前馈网络,卷积神经网络的各层中的神经元是3维排列的:宽度、高度和深度。
卷积神经网络是处理二维数据信息。由卷积层、池化层和全连接层组成。卷积层通过卷积核提取输入数据的局部特征,池化层对特征图进行降维以减少计算量和防止过拟合,全连接层将特征图转换为最终的输出。CNN的核心思想是利用卷积操作来提取图像的局部特征,并通过多层的堆叠实现对复杂特征的抽象和表示。
神经网络出现全连接层的概念可以理解为:通过矩阵乘法的计算过程,将前一层的输出与当前层的每个神经元全连接,实现特征的整合和分类
应用于图像识别、视频分析、自然语言处理等领域表现出色。由于其能够自动提取图像的局部特征,因此在图像分类、目标检测、图像分割等任务中具有很高的性能。此外,CNN还能够处理高维数据,避免了梯度消失或梯度爆炸的问题。
循环神经网络(RNN)
如同卷积神经网络是专门用于处理二维数据信息(如图像)的神经网络,循环神经网络是专用于处理序列信息的神经网络。循环网络可以扩展到更长的序列,大多数循环神经网络可以处理可变长度的序列,循环神经网络的诞生解决了传统神经网络在处理序列信息方面的局限性。
原理
RNN存在一个记忆的概念,可以从先前的输入中获取信息,以影响当前的输入和输出;并且对序列的每个元素都执行这个相同的步骤。
特征解读-RNN在每个步骤执行相同任务(是逐步推进,逐步更新权重参数(所以不加以在隐藏层引入适当机制,很容易出现学了后面的忘了前面的情况,后面更新的权重参数直接把前面的权重灭了),最后RNN只留下一个学习完整个任务所得到的权重参数集合),只是使用不同的输入,这大大减少了我们需要学习的参数总数。
缺点和应用
因此RNN常应用于需要考虑顺序或时间的问题,如自然语言处理 (NLP)、语音识别等;它们也被包含在一些流行的应用中,比如 Siri、语音搜索和 Google Translate。
缺点也同BP,存在梯度爆炸和梯度消失问题,且RNN更加明显。
长短期记忆网络(LSTM)
传统RNN记忆问题:距离较远的文本信息无法得到利用、距离较近但语义上关联不大的文本信息,其实就是记不住太久之前的信息。
张量tensor
LSTM的输入是3d张量
原理
LSTM是一种特殊的RNN,它通过引入三个门结构(遗忘门、输入门和输出门)来更好地处理长序列数据,减少梯度消失和梯度爆炸的问题。每个时间轴是BP神经网络,隐藏层较之于RNN多了一个细胞状态矩阵C-遗忘门,通过输入层x和隐藏层h完成一系列矩阵运算更新。
单元体结构:
细胞状态c矩阵是一个类似存储历史信息的储存库,由三个门控机制来控制其信息的输入输出。这三个门分别是遗忘门(forget gate)、输入门(input gate)、输出门(output gate)。直观理解门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。门的输出是0到1之间的实数向量,那么,当门输出为0时,任何向量与之相乘都会得到0向量,这就相当于啥都不能通过;输出为1时,任何向量与之相乘都不会有任何改变,这就相当于啥都可以通过。因为δ(sigmoid函数)值域是(0,1),所以门的状态都是半开半闭的。
遗忘门决定了上一时刻的单元状态有多少保留到当前时刻ct;输入门决定了当前时刻网络的输入xt有多少保存到单元状态ct。输出门来控制单元状态ct有多少输出到LSTM的当前输出值ht。
从运算上来讲,遗忘门和输出门就是做点乘的门控操作,乘0就是遗忘它,乘1就是输出它,输入门实现了真正的信息融合,将此时此刻的输入x和上一时刻的输出ht-1,处理一下然后相加融合在一起
计算过程动图参考:门运算动图展示
上述过程汇总的单元体计算公式:
BI-LSTM(基于LSTM的时间序列预测)
说白了就是双向lstm,BI-LSTM结合了前向和后向LSTM,能捕捉序列数据中的前后上下文信息,特别适用于自然语言处理任务,如文本分类和情感分析。
存在:计算开销、过拟合、长序列信息衰减等问题。