给神经网络加入先验知识!

简介: 给神经网络加入先验知识!

如何给神经网络加入先验?


出几道题目开场!


  1. 广告展现预估场景,要求广告主充钱越多,曝光越多,如何用神经网络做到?


  1. 多层次文本分类,要求笔记本电脑概率高的时候,电子设备的概率要接近,如何做到?


  1. 多目标电商行为预测,要求加购,下单,支付的概率保持单调性,如何做到?


以上问题,都对应着给神经网络加入先验的狭义应用。想看答案翻到最后!


今天的班车原创日更,我们就仔细探讨一下这个问题。


广义上讲,给神经网络加入先验,包含约定结果假设,引导神经网络,限制学习路径等。


用一句话讲,我不要神经网络觉得,我要我觉得!


在前面文章,为什么GBDT可以超越深度学习,讲解了人对数据的理解,作用于特征工程时候,会更有利于提升决策树,并且引用了好风凭借力,祝我上青云的例子


那么问题来了,在决策树我会做特征,到了神经网络具体怎么操作呢?

我们从这四个方面展开,给大家抛砖引玉。


数据和特征



1.数据和特征层次


输入层次的先验引入主要是通过数据和特征下手,我们在前面文章,特征工程给了很好的例子可能是全网写特征工程最通透的...。


特征工程又不是传统机器学习算法的专属,神经网络良好的借用含有人先验知识的特征,也可以起到事半功倍的效果。


神经网络在非线性建模上有着无可比拟的优势,但一些特定的任务还是非常考验人的先验的。比如声纹识别领域,必须借助高级的特征工程,例如MFCC,这里面包含了大量的人工步骤和经验参数,预加重,分帧,加窗,快速傅里叶变换(FFT),梅尔滤波器组,离散余弦变换(DCT),等等,通过这些具体的操作把人对声音的刻画引入到神经网络。

Kaggle老话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。真的是金玉良言。


除此之外,在表数据也有很多特征辅助网络刷点的例子,比如CTR场景基本就是大量的特征构成的。引用DCN论文里的一句话:People generally consider DNNs as universal function approximators, that could potentially learn all kinds of feature interactions. However, recent studies found that DNNs are inefficient to even approximately model 2nd or 3rd-order feature crosses,他这里的意思就是说高阶的特征尽量往NN的后面放。其实原理直白了,我们前面的文章也都多多少少暗含了。就是富含先验特征是人工借力,你都有很多“人工”智能的成分了,就不要让NN瞎搞了,尽量靠后,这样NN的非线性搞砸的几率就变小了。


模型结构


2.模型结构层次


模型结构层次其实是大家一直在做的事情,具体的例子太多了。比如文本分类里面非常经典的textcnn模型,他假设了基本的文本分类原理。语义的局部组合性质,用3,4,5的卷积窗来模拟N-gram(词组)的语义学习。除此之外,图像分类常用的CNN中使用的卷积层就是局部假设,利用了图像像素距离越近相关性越强的先验 ,还有CTR中典型的神经网络交叉操作,都是人对数据和任务理解,在网络设计中具体的表达形式。


NLP中经典的注意力机制,也是如此。注意力机制现在几乎成了任何深度学习任务的必备组件了,他们提出的初衷都是人的先验,在神经网络中学习组件的具象化。


网络参数


3.网络参数层次


网络参数层次引入先验,这个分支路线点开了神经网络上预训练的技能树

包括不限于word2vec,Bert,乃至图像里面的预训练resnet,MAE等。前面写的文章讲的很清楚:


一文串起从NLP到CV 预训练技术和范式演进


他们搞的事情,就是把知识融入到网络参数中。为了达到这个目标,使用了很多目标任务选择方式的技能。比如NLP里从传统神经语言模型,发展到完形填空。CV里从大数据集分类预训练到图像复原重建。


当然除了目标任务选择,也涉及2里很多网络结构的设计。


模型蒸馏也算一种在网络参数层次+目标约束引入先验的具体操作。狭义的蒸馏是大的教师模型,用来指导小模型的训练,可以达到模型压缩,以及知识转移的作用。这里对模型蒸馏不再展开,可以查阅相关文章。


目标约束


4.目标约束层次


比如最近兴起的对比学习,他是很典型的在目标约束层次+数据和特征层次引入先验的。对比学习最简单的例子可以翻看前文


5行代码实现的对比学习,效果超好!


除了对比学习,文章开头题目中提到的问题,很多都是在目标约束层次来解决的。


回答开头的问题1,保持神经输出关于具体输入的单调性。神经网络的预测目标的单调性协议Loss,就是通过损失函数对单调性的约束,惩罚了破坏单调性的行为。



回答开头的问题2,回答层次分类约束的题目,包括各种先验的正则化,通过目标层级无环图,设计分层L2正则,约束了链接关系相近的类别,其预测值也要接近。



回答开头的问题3,回答多目标任务单调性的题目。我们可以通过这样的损失约束,来惩罚目标不不单调的行为。



当然,以上具体的正则化和Loss形式,都没法做到完全的单调性保证,只是尽量用人的先验来约束目标。


好了,班车也基本到站了。我们给文章做个总结,文章在数据和特征层次模型结构层次网络参数层次,目标约束层次四个方面总结了神经网络加入先验的方法。


相关文章
|
7月前
|
机器学习/深度学习 自然语言处理 算法
神经网络分类算法的应用及其实现
神经网络分类算法的应用及其实现
110 0
|
6月前
|
机器学习/深度学习 算法 数据可视化
感知机和神经网络
**神经网络**是模仿生物神经元结构的数学模型,用于处理复杂关系和模式识别。它由输入层、隐藏层(可能多层)和输出层组成,其中隐藏层负责信息处理。随着层数增加(深度学习),网络能处理更多信息。基本模型包括感知机,仅输入和输出层,用于线性划分;而**BP神经网络**有多个隐藏层,通过反向传播和梯度下降优化参数,避免局部最小值。训练过程中,神经元通过激励函数响应并调整权重,以提高预测准确性。
|
6月前
|
机器学习/深度学习 算法 PyTorch
神经网络反向传播算法
神经网络中的反向传播算法是用于训练的关键步骤,通过计算损失函数梯度更新权重。它始于前向传播,即输入数据通过网络得出预测输出,接着计算预测与实际值的误差。反向传播利用链式法则从输出层开始逐层计算误差,更新每一层的权重和偏置。例如,一个包含隐藏层的网络,初始权重随机设定,通过反向传播计算损失函数梯度,如sigmoid激活函数的网络,调整权重以减小预测误差。在Python的PyTorch框架中,可以使用`nn.Linear`定义层,`optimizer`进行参数优化,通过`backward()`计算梯度,`step()`更新参数。
|
6月前
|
机器学习/深度学习 存储 算法
简单的神经网络
softmax激活函数将多个未归一化的值转换为概率分布,常用于多分类问题。交叉熵损失函数,特别是与softmax结合时,是评估分类模型性能的关键,尤其适用于多分类任务。它衡量模型预测概率与实际标签之间的差异。在PyTorch中,`nn.CrossEntropyLoss`函数结合了LogSoftmax和负对数似然损失,用于计算损失并进行反向传播。通过`loss.backward()`,模型参数的梯度被计算出来,然后用优化器如`SGD`更新这些参数以减小损失。
|
6月前
|
机器学习/深度学习
什么是神经网络?
神经网络是一种深度学习方法,源自人类大脑生物神经网络的概念。它由大量相互连接的人工神经元(也称为节点或单元)组成,每个神经元接收输入,进行简单处理后生成输出,并将结果传递给下一层的神经元。
104 2
|
6月前
|
机器学习/深度学习 监控 API
神经网络之防止过拟合
防止神经网络过拟合的方法包括正则化,如L1(Lasso)和L2(岭回归)正则化,以及Dropout技术。L1正则化能产生稀疏权重,帮助特征选择;L2正则化避免权重过大但不使其为零。Dropout在训练时随机关闭部分神经元,减少依赖,提高模型泛化能力。此外,还有数据增强、早停法等策略来改善过拟合问题。
|
6月前
|
机器学习/深度学习 算法 语音技术
神经网络
【6月更文挑战第14天】神经网络。
51 3
|
7月前
|
机器学习/深度学习 存储 人工智能
一文带你了解神经网络是如何学习预测的
一文带你了解神经网络是如何学习预测的
75 0
|
机器学习/深度学习 算法 PyTorch
神经网络知识蒸馏
翻译:《Distilling the knowledge in a neural network》
104 0
|
机器学习/深度学习 算法
连载|神经网络(上)
连载|神经网络(上)