模型训练trick篇

损失函数

分类任务

  • 0-1损失函数
  • 绝对值损失函数,
  • 指数损失函数exponenetial loss,,例如adaboost
  • 感知损失函数perceptron loss,,
  • 合并损失函数Hinge loss,,例如SVM
  • 交叉熵损失函数crossEntropy,也是负的对数似然函数
    • 怎么从最大似然推导?“已知输出Y,假设Y的分布,对Y的分布参数进行似然估计”。先写出预测值为y的概率表达式,假设多个样本独立同分布,则最大似然估计为,然后去负的对数似然即可。
    • 二分类loss:,其中x表示样本,y表示实际的标签,a表示预测的输出,n表示样本总数。假设为伯努利输出分布
    • 多分类loss: 。广义伯努利输出分布
    • 这里输出a的输出单元一般用softmax或sigmoid函数。
    • 交叉熵越低,就证明有算法所算出的非真实分布越接近真实分布。

例如,对于“一枚正反对称的硬币上抛十次”这种事件,我们可以问硬币落地时十次都是正面向上的“概率”是多少;而对于“一枚硬币上抛十次,落地都是正面向上”这种事件,我们则可以问,这枚硬币正反面对称的“似然”程度是多少。
在机器学习中,损失函数一般使用的是负对数似然,这里的对数似然指的是在已知输出Y的情况下,对Y的分布参数进行似然估计,估计的参数与输入X有关。–>
优点:在计算梯度的时候,差异越大,梯度越大,学习越快。

回归任务

  • MSE 均方误差
  • RMSE 均方根误差

分类任务的损失函数能不能用平方损失函数?当使用sigmoid作为激活函数的时候,一般用交叉熵损失函数而不用均方误差损失函数。
不能,当输出单元使用sigmoid函数的时候。平方损失函数对某一个样本点的参数的导数为,其中是sigmoid函数的导数,在达到饱和状态时,导数值会接近0,使得梯度下降很慢。而log损失函数对某一个样本点的参数的导数是,与sigmoid导数无关。

优化算法

给定一个与参数有关的目标函数,求使得目标函数最小的参数。梯度下降通过不断往梯度的负方向移动参数来求解。

  • batch gradient descent (BGD)
    • 需要计算整个训练集的梯度。优点:凸函数可以找到全局最优;非凸函数可以找到一个局部最优。缺点:速度慢,数据量大时不可行
  • stochastic gradient descent (SGD)
    • 仅计算某个样本的梯度。优点:更新频次快,优化速度快,一定的随机性导致有几率跳出局部最优。缺点:随机性导致收敛复杂化,即使到达最优点仍旧会进行过度优化
  • mini-batch gradient descent (MBGD)
    • 计算包含n个样本的mini-batch的梯度。优点:参数更新的动荡变小,收敛过程更稳定,可以利用现有的线性代数库高效的计算多个样本的梯度。缺点:无法保证一个最优解。容易遇到“鞍点”,这个时候四周梯度都是0,很难跳出。
      现在在深度学习中用到的SGD其实就是这里的MBGD,使用这个策略时我们还需要考虑以下因素:
  1. 如何选择合适的学习率,学习率如何调整?【引入动量】
  2. 对所有参数的更新采用相同的学习率是否恰当?【自适应学习率优化算法就是让学习率根据累加和自动调整】
  3. 如何跳出局部最优? 【动量使得虽然当前梯度为0,但累加动量并不为0,所以继续学习】

基于以上问题,提出的梯度下降优化算法:
固定学习率

  1. momentum
  2. 优点:动量的引入是为了加速SGD的优化过程,对方向一致的参数能够加速学习,对梯度改变方向的参数能够减少其更新。
  3. 缺点:比较难学习一个较好的学习率。
  4. Nesterov accelerated gradient
  5. 改进:通过去看前方的梯度,实现快到达时进行减速。
    自适应学习率
  6. Adagrad
  7. ,其中为t时刻前所有施加到参数上的梯度的平方和。
  8. 优点:为出现频率不高的参数提供一个大学习率,为经常出现的参数提供一个小的学习率。
  9. 缺点:因为累计梯度增加,最后学习率过低而学不到东西。
  10. adadelta
  11. 优点:将adagrad中的累积平方和改为一个窗口范围内的梯度平方之和。
  12. RMSprop
  13. 优点:改进了Adagrad在深度学习中过早结束的问题;2.适用于处理非平稳。
  14. 缺点:
  15. Adam
  16. momentum+rmsprop,每一次梯度是之间的均值,且被历史值惩罚系数。另外做了一个偏差纠正,在最开始训练的时候纠正均值的计算。
  17. 本质上是带有动量项的RMSprop,它利用梯度的一阶矩和二阶矩动态的调整每个参数的learning rate(自适应learning rate)。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

评估指标

一、分类问题的离线评估
精确率precision:分类正确的正样本个数占分类器判定为正样本的样本个数的比例
召回率recall:分类正确的正样本个数占真正的正样本个数的比例
F1指标: 精确率和召回率的调和平均值
P-R曲线:横轴为recall召回率,纵轴为precision精确率画图。此消彼长,负相关
ROC曲线:将所有样本按照预测为正例的概率排序,最有可能可能为正例的排在最前面,按照此顺序将样本作为正例进行预测,则每次都可以得到一个假正例率FPR和真正例率TPR,前者为横轴,后者为纵轴画图得到的就是ROC曲线。

  • 假正例率:假正例占所有假例的比例(横轴)。 物理意义是:随机拿一个没有被点击过的样本,有多大概率会把他预测为点击样本。
  • 真正例率:真正例占所有正例的比例(纵轴)。物理意义是:随机拿一个被点击过的样本,有多大概率会把他预测为点击样本。
  • auc的概率意义:随机选择一个正例和一个负例,分类器给正例的打分大于给负例打分的概率
  • auc的统计算法:将所有样本按照预测概率进行逆序排序,正例在负例前面的pair对占全部pair对的比例。
    使用auc作为评价指标的好处是它避免了对阈值的考虑,能够反映分类器整体的泛化性能,另外它对样本类别是否均衡并不敏感。ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状 能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。若选择不同的测试集,P-R曲线的变化就会非常大,而ROC曲线则 能够更加稳定地反映模型本身的好坏。所以,ROC曲线的适用场景更多,被广泛 用于排序、推荐、广告等领域。但需要注意的是,选择P-R曲线还是ROC曲线是因 实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映其性能。

二、排序问题
NDCG 通常用来衡量和评价搜索结果算法。

其中i表示排序位置,表示第i个位置上的相关度。因此rel_i越高得分越高,越高的rel_i对应越小的i得分越高。

数据处理

1.负样本的选择
分类:简单样本:即模型非常容易做出正确的判断;困难样本:即模型难以做出正确的判断,训练时常会给模型带来较大损失。相对于简单样本,困难样本更有价值,它有助于模型快速学习到边界,也加快了模型的收敛。
基于统计度量的负样本选择方法,例如选择和目标样本集合相似度较高的样本作为负例。
基于模型的负样本选择方法,用训练好的模型预测所有的负样本,找出预测错的或者产生较大loss的样本作为优质负样本,然后再去训练模型,不断迭代优化模型。

2.为什么要做归一化
一个是为了加快模型训练的收敛速度,因为梯度的方向和等高线的切线是垂直的,圆形的等高线能够使梯度下降算法有最少的迭代步数到达函数最低点,而椭圆形的等高线收敛更慢;另一个原因是避免输出位于输出函数例如sigmoid的饱和区,做归一化能够更大程度避免这种情况。

为什么要做normalization?
在深度模型中,因为有多层隐藏层,每一层的参数更新都会导致上层的输入数据在输出时分布规律发生了变化,并且这个差异会随着网络深度增大而增大,这样会导致每个神经元的输入数据不再是独立同分布的了。那么:

  1. 上层参数需要不断适应新的输入数据分布,降低学习速度;
  2. 下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区。反向传播时低层神经网络的参数更新会出现梯度消失。
    batch normalization和layer normalization的区别?
    BN是对batch内所有样本的同一维度特征做归一化,LN是对这单个样本的所有维度特征做归一化。
    为什么在NLP中多用LN而不是BN?
    首先讲什么时候不适合用BN。1.mini-batch较小的情况下不太适用;2.BN无法应用在RNN中,因为不同句子的同一位置的分布大概率是不同的,因此应用BN来约束是没有意义的。
    具体而言,BN就是在每个维度上统计所有样本的值,计算均值和方差;LN就是在每个样本上统计所有维度的值,计算均值和方差。
    另一种解释:NLP通过LN对整个高维球体语义空间内进行了0均值1方差的约束。

模型结构

1.激活函数
作用:增加网络的非线形表达能力。
激活单元又分为隐藏单元和输出单元,隐藏单元:tanh、relu;输出单元:sigmoid、softmax

  • sigmoid函数: 输出范围在0~1之间,适合做输出单元,缺点:1. 输出不是以0为中心,所以会降低权重更新的效率;2. [-6,6]之间梯度可求,其他范围梯度为0,参数更新慢
  • tanh函数: 输出在-1~1之间,这与大多数场景下特征分布是0中心的吻合,并且tanh函数在输入0附近相比sigmoid函数有更大的梯度,通常使模型收敛更快。
  • relu函数: 。优点:1. 计算高效简单;2. 当输入为正时,不存在梯度消息和梯度爆炸问题;3.更符合生物学神经激活机制。缺点:1. relu可能会死亡,不再更新梯度;2.relu的输出是非零中心化的,给后一层的神经网络引入偏置偏移, 会影响梯度下降的效率。针对死神经元的改进方法:1.初始化参数用Xavier初始化方法;2.避免将learning rate设置太大,使用adam动态调整learning rate;3.换成其他relu,例如leaky relu。
  • leaky Relu: 。优点:不会出现死神经元的情况。
    输出单元中,二分类多使用sigmoid,多分类则多使用softmax函数。以softmax为决策函数,交叉熵函数为损失函数的时候,计算损失函数对最后一层参数w的导数会非常方便。
    激活单元首选Relu

2.dropout
在每一次迭代训练中随机的隐藏一定概率的隐藏单元,因此每一次迭代的模型都是不同的,每一个神经元都不能多度依赖于另一个神经元,因此增强了模型的鲁棒性。
在测试过程中,将dropout的参数p乘以输出。

3.模型参数可以初始化为同样的值吗?
不能。因为此时隐藏层中各单元呈对称性,在计算梯度下降时,各单元也呈对称性,那么多个隐藏单元在做相同的事情,多个隐藏单元没有意义。因此在初始化参数的时候,应该随机初始化为比较小的值。

训练方法

  1. batch size怎么定?
    大的batch size能够减少训练时间,同时提高梯度计算的稳定性。
    在同一批训练数据下,batch size增加N倍,学习率对应增加N倍,保证同样的样本更新后的权重相等。

  2. 防止过拟合

  3. 数据集:增加数据;数据增强,例如词典替换,反向翻译

  4. 模型:

    • 更简单的模型,例如层数更少
  • dropout
  • L1、L2正则:带约束条件的凸优化问题,L1正则倾向于产生稀疏向量,用于特征选择;L2正则即权重衰减
  • 参数共享-albert
  • early stopping:当迭代到一定次数时(参数w比较大时),就提前结束训练
  1. 集成方式:bagging

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/651292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELK日志解决方案

ELK日志解决方案 ELK套件日志系统应该是Elasticsearch使用最广泛的场景之一了,Elasticsearch支持海量数据的存储和查询,特别适合日志搜索场景。广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例,使用Logstash和Be…

JQuery 新手经常遇到的问题强调

JQuery 新手经常遇到的问题强调 1.HTML onready document.onready $(function(){ }); 2.HTML onload window.onload 页面加载完毕 3. JQuery绑定事件的先后顺序 4.Jquery js异常默认隐藏问题 5.JQuery 版本接口问题 更多: 网页在线打开PDF_网站中在线查看P…

WPF中的选项卡布局TabControl控件

在WPF中,可以使用TabControl控件来创建选项卡布局。TabControl是一种容器控件,它通过选项卡(TabItem)来组织和显示多个页面或面板。 TabControl控件通常由两个部分组成:选项卡头部(Header)和选…

Scikit-learn (sklearn)速通 -【莫凡Python学习笔记】

视频教程链接:【莫烦Python】Scikit-learn (sklearn) 优雅地学会机器学习 视频教程代码 scikit-learn官网 莫烦官网学习链接 本人matplotlib、numpy、pandas笔记 1 为什么学习 Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一. Sk…

burp靶场--WebSockets安全漏洞

burp靶场–WebSockets安全漏洞 https://portswigger.net/web-security/websockets/what-are-websockets ### 什么是 WebSocket? WebSocket是一种通过 HTTP 发起的双向、全双工通信协议。它们通常在现代 Web 应用程序中用于流数据和其他异步流量。 在本节中&#x…

ChatGPT 官方中文页面上线

根据页面显示,OpenAI 现已推出 ChatGPT 的多语言功能 Alpha 版测试,允许用户选择不同语言的界面进行交互。 如下图所示,ChatGPT 会检测系统当前所使用的语言,并提示用户进行语言切换。 用户也可通过设置页面选择其他语言。目前&a…

计算机网络(第六版)复习提纲14

SS3.5 高速以太网 之前讲的10Mbps以太网,使用CSMA/DA协议,51.2us争用期,64Byte最小帧,9.6us间隔。 ATM:异步传输模式,速度可达155Mbps。 1.100BASE-T以太网 也称快速以太网, 在双绞线上传送100M…

Java Collection 和 Collections的区别

Java的Collection和Collections主要在以下三个方面存在区别: 角色与功能: Collection是一个集合接口,它为各种具体的集合提供了最大化的统一操作方式。它是Java集合框架中集合类的一个基本接口,包括List、Set、Queue等集合类的父…

13.docker私服registry搭建

容器注册 Docker Hub是最大、使用最广泛的docker容器注册托管中心。 registry用于保存docker镜像,包括镜像的层次结构和元数据。启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜…

Linux之系统安全与应用

Linux系统提供了多种机制来确保用户账号的正当,安全使用。 系统安全措施 一. 清理系统账号 1.1 将用户设置为无法登录 Linux系统中除手动创建的各种账号外,还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户root以外,其他的…

【issue-halcon例程学习】measure_pin.hdev

例程功能 检测IC引脚。代码更多地关注测量函数的可视化情况。 代码如下 dev_close_window () read_image (Image, ic_pin) get_image_size (Image, Width, Height) dev_open_window (0, 0, Width / 2, Height / 2, black, WindowHandle) set_display_font (WindowHandle, 14,…

免费开源的微信小程序源码、小游戏源码精选70套!

微信小程序已经成为我们日常的一部分了,也基本是每个程序员都会涉及的内容,今天给大家分享从网络收集的70个小程序源码。其中这些源码包含:小游戏到商城小程序,再到实用的工具小程序,以及那些令人惊叹的防各大站点的小…

【Linux】文件描述符 | 重定向 | C文件指针与fd的关系 | 用户级缓冲区

文章目录 一、文件描述符1. 理解:Linux下一切皆文件2. 文件描述符(fd)的概念3. 文件描述符的分配规则4. 进程创建时默认打开的 0 & 1 & 2 号文件 二、重定向1. 重定向的本质2. 使用dup2系统调用函数3. bash下的三种重定向4. 三种重定…

全面理解“张量”概念

1. 多重视角看“张量” 张量(Tensor)是一个多维数组的概念,在不同的学科领域中有不同的应用和解释: 物理学中的张量: 在物理学中,张量是一个几何对象,用来表示在不同坐标系下变换具有特定规律的…

业务流程设计相关学习笔记

一文读懂华为LTC流程和变革精髓! 第一个是从概念到市场。 也就是之前讲的 IPD 开发流程。 从捕捉到客户新的需求开始,到新产品完成开发并成功推向市场,最终得到客户的认可为止; 第二个是从市场到线索。 具体是指 MTL 流程&#x…

TI毫米波雷达

收集一些介绍TI毫米波雷达优秀的帖子,供未来学习参考 1. TI毫米波雷达日记TI毫米波雷达笔记_网易独家音乐人Mike Zhou的博客-CSDN博客

(N-141)基于springboot,vue网上拍卖平台

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plusredi…

GNS3连接Vmware虚拟机

1 安装配置Gns3、Vmware 安装过程略,最终版本号: Gns3:2.2.44.1 Vmware:17.0 建议保持一致,特别是Gns3,功能虽然强大的,但bug问题感觉也不少 2 虚拟机配置 新建两台Ubuntu 22.04虚拟机&#…

素引是什么

素引(Bloom filter)是一种概率型数据结构,用于快速判断一个元素是否属于一个集合。它可以用来检索大规模数据集中是否存在某个元素,具有高效的查询速度和较低的存储需求。 素引的工作原理如下: 初始化:创…

【JavaScript权威指南第七版】读书笔记速度

JavaScript权威指南第七版 序正文前言:图中笔记重点知识第1章 JavaScript简介第一章总结 第2章 词法结构注释字面量标识符和保留字Unicode可选的分号第二章总结 第3章 类型、值和变量【重要】原始类型特殊类型第三章总结 第4章 表达式与操作符表达式操作符条件式调用…