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

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

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


出几道题目开场!


  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形式,都没法做到完全的单调性保证,只是尽量用人的先验来约束目标。


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


相关文章
|
5月前
|
机器学习/深度学习 自然语言处理 算法
神经网络分类算法的应用及其实现
神经网络分类算法的应用及其实现
91 0
|
11月前
|
机器学习/深度学习 存储 算法
神经网络中的量化与蒸馏
本文将深入研究深度学习中精简模型的技术:量化和蒸馏
99 0
|
4月前
|
机器学习/深度学习 算法 数据可视化
感知机和神经网络
**神经网络**是模仿生物神经元结构的数学模型,用于处理复杂关系和模式识别。它由输入层、隐藏层(可能多层)和输出层组成,其中隐藏层负责信息处理。随着层数增加(深度学习),网络能处理更多信息。基本模型包括感知机,仅输入和输出层,用于线性划分;而**BP神经网络**有多个隐藏层,通过反向传播和梯度下降优化参数,避免局部最小值。训练过程中,神经元通过激励函数响应并调整权重,以提高预测准确性。
|
4月前
|
机器学习/深度学习 算法 PyTorch
神经网络反向传播算法
神经网络中的反向传播算法是用于训练的关键步骤,通过计算损失函数梯度更新权重。它始于前向传播,即输入数据通过网络得出预测输出,接着计算预测与实际值的误差。反向传播利用链式法则从输出层开始逐层计算误差,更新每一层的权重和偏置。例如,一个包含隐藏层的网络,初始权重随机设定,通过反向传播计算损失函数梯度,如sigmoid激活函数的网络,调整权重以减小预测误差。在Python的PyTorch框架中,可以使用`nn.Linear`定义层,`optimizer`进行参数优化,通过`backward()`计算梯度,`step()`更新参数。
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
神经网络中的归一化
**神经网络中的归一化方法加速和稳定学习,避免梯度问题。通过批量归一化(Batch Normalization),每个mini-batch数据被调整至均值0、标准差1的分布,减少数据分布变化带来的不稳定性,提升模型训练速度与泛化能力。归一化也包括L1和L2正则化,如sklearn库中的Lasso和Ridge实现。批量归一化层如PyTorch中的`nn.BatchNorm2d`,调整输入数据分布并学习可变参数。**
|
4月前
|
机器学习/深度学习 监控 API
神经网络之防止过拟合
防止神经网络过拟合的方法包括正则化,如L1(Lasso)和L2(岭回归)正则化,以及Dropout技术。L1正则化能产生稀疏权重,帮助特征选择;L2正则化避免权重过大但不使其为零。Dropout在训练时随机关闭部分神经元,减少依赖,提高模型泛化能力。此外,还有数据增强、早停法等策略来改善过拟合问题。
|
5月前
|
机器学习/深度学习 存储 人工智能
一文带你了解神经网络是如何学习预测的
一文带你了解神经网络是如何学习预测的
67 0
|
机器学习/深度学习 算法 PyTorch
神经网络知识蒸馏
翻译:《Distilling the knowledge in a neural network》
|
机器学习/深度学习
神经网络模型在实际数学模型中的运用
图 1 表示出了作为人工神经网络(artificial neural network,以下简称NN)的基本单元的神经元模型
72 0
|
机器学习/深度学习 人工智能 算法
【Pytorch神经网络理论篇】 24 神经网络中散度的应用:F散度+f-GAN的实现+互信息神经估计+GAN模型训练技巧
MINE方法中主要使用了两种技术:互信息转为神经网络模型技术和使用对偶KL散度计算损失技术。最有价值的是这两种技术的思想,利用互信息转为神经网络模型技术,可应用到更多的提示结构中,同时损失函数也可以根据具体的任务而使用不同的分布度量算法。
431 0