神经网络与深度学习笔记——代价函数,规范化,过拟合

2023-11-18

神经网络与深度学习笔记系列一共有五个专题,分别是
第一章使用神经网络识别手写数字——梯度下降算法是什么。主要介绍了神经网络的基础例如感知器激活函数等概念,最主要介绍了梯度下降算法。
第二章反向传播算法如何工作——反向传播算法原理。主要介绍了反向传播算法的工作原理。

第三章改变神经网络的学习方法——代价函数,规范化,过拟合。主要介绍了不同的代价函数,以及规范化等对传统代价函数的改造。

第四章深度神经网络为何难以训练——梯度消失和爆炸。主要介绍了梯度消失问题和梯度爆炸问题。

第三章改进神经网络的学习方法

3.1交叉熵代价函数

        类似于人类试错过程,我们希望神经网络在预测的最终结果和我们想要的结果差距越大时,神经网络对权重和偏置的改变也越大,当慢慢接近真实结果时,改变变小。但是事实上神经网络的学习却是非常缓慢的,原因是我们采用的sigmoid函数两端变得非常平,代价函数对权重和偏置的偏导数变得很小,所以导致了学习缓慢。我们可以通过使用交叉熵代价函数在替换二次代价函数,改善这个问题。

3.1.1交叉熵代价函数的引入

首先给出交叉熵代价函数的公式:

a表示神经元的输出,求和是对所有的输入x进行求和。

        首先解释为什么可以把交叉熵函数看做是网络的代价函数。原因有两个,第一,交叉熵函数是正值。因为a的取值是0到1。第二,如果神经元的输出a与标签y接近,代价函数的值趋于0。①当a趋于1,y=1时,第二项为0,第一项趋于0。②当a趋于0,y=0时,第一项为0,第二项趋于0。

        而且,交叉熵函数避免了学习缓慢的问题,让我们利用代价函数对权重和偏置求偏导数:

因为\sigma'(z)=\sigma(z)(1-\sigma(z))所以上式化简为:

通过上式,我们可以看到,代价函数对权重的偏导数取决于\sigma(z)-y的值,也就是说,网络输出的结果与实际结果相差越大,网络学习得越快,网络输出的结果与实际结果相差的越小,网络学习得越慢。

同样的方法可以求出代价函数对偏置的偏导数:

以上是一个神经元的交叉熵函数,对于输出层所有的所有神经元,假设y=y_1,y_2,y_3........是神经元的目标输出值,a_1^L,a_2^L,a_3^L是网络的预测输出值,则代价函数的表达式为:

先对一个输入所有的神经元进行求和,再对所有的输入进行求和。

3.1.2交叉熵代价函数是怎么想到的?直观的理解又是什么?

我们发现,导致学习速率下降的原因是因为在对权重和偏置的偏导数中存在\sigma'(z)项,我们首先会想到设计一个代价函数,使得在最终的偏导数中没有\sigma'(z)项,那么对一个训练样本,偏导数为:

然后我们根据数学直觉进行推导:

对a进行积分得:

然后再对所有的输入样本进行求和,就可以得到我们说所讲的交叉熵代价函数。

那么交叉熵代价函数的直觉理解又是什么呢?

一种来自信息论领域的理解就是,交叉熵函数是一种“不确定性”的度量。

3.1.3柔性最大值(softmax)

首先给出softmax的定义式:

因为指数函数的值正的,所以神经元的激活值都是正的,而且,所有的激活值相加的结果等于1。任何神经元的激活值a_j^L与本层所有的z_k^L都有关。

所以,使用softmax作为激活函数的层,可以看作网络预测的一个概率分布。

对于偏导数\partial {a_j^L}/\partial z_k^L,对于j=k时,其值为正,对于j\not =k时,其值为负。这表明,当增加z_k^L会提高对应的激活值a_j^L的值并降低其他激活值。

利用softmax函数作为激活函数时,我们定义一个对数似然函数作为代价函数:

计算偏导数为:

可以看到,当误差(a-y)越大时,偏导数越大,说明学习越快,能够解决学习缓慢的问题。

3.2过拟合和规范化

过拟合(overfitting)是指网络在训练集上表现的良好,但是在测试集上表现得一般甚至很差,可能会发生的情况有,训练集的cost一直在下降,但是测试集上的cost一开始下降后来停在一个很高的值上,上下波动,甚至cost越来越大,或者在训练集上准确率非常高甚至达到百分之百,但是在测试集上准确率与训练集准确率相差很大甚至准确率很低。产生过拟合的原因是,网络利用超大规模的参数,记住了训练数据集的特征,利用“记忆”,所以在训练集上表现良好,实际上并没有学习到事物的一般的特征,导致泛化能力下降,在测试集上表现很差。最好的降低过拟合的办法之一是增加训练数据的量。

3.2.1规范化

除了增加训练样本来降低过拟合以外,使用规范化也可以有效的降低过拟合。规范化也被叫做权重衰减(weight decay)或者L2规范化。这种方法的原理就是在之前的代价函数上增加一项网络中所有的权重的累加平方和取平均。

C0表示原始的代价函数,我们以交叉熵代价函数为例:

直观上看,规范化的的效果是更倾向于权重值小的网络模型,或者说,是根据\lambda的取值来在小的权重值和小的代价之间的折中,\lambda越小,网络越倾向于最小化原始代价函数,\lambda越大,网络倾向于小的权重。

3.2.2对于规范化可以减轻过拟合的直观理解

小的权重在某种程度上,意味着更低的复杂性,也就对数据给出了一种更简单却更强大的解释。更小的权重意味着网络的行为不会因为我们随便改变了一个输入的大小而改变太大,将它看做是单个的证据不会对网络输出影响太多。规范化的网络学习去对整个训练集中经常出现的证据进行反应。简言之,规范化网络受限于根据训练数据中常见的模式来构造相对简单的模型,而能够抵抗训练数据中的噪声的特性影响。

3.2.3规范化的其他技术

本节主要介绍现存的除了L2规范化以外的三种降低神经网络过拟合的方法技术:L1规范化、弃权和人为增加训练数据。

L_1规范化形式为:

L_1规范化更倾向于聚集网络的权重在相对少量的高重要度连接上,而其他权重就会被趋势向0接近。

弃权(dropout):dropout的主要思想是,在训练网络是,保持输入层和输出层的神经元不变,每一次训练选用一小批数据进行,并且在训练前随机的“删掉”隐藏层一半的神经元,(删掉是指不参与本次训练过程,但是有可能参与后续的训练过程。)然后在用另一小批数据进行训练,重新随机“删掉”隐藏层的一半神经元。启发式地看,当我们“删掉”一半的神经元时,就好像在训练不同的网络,训练的最终结果好就好比我们同时训练了好几个网络模型,最终的结果由这几个网络模型的平均效果决定。

人为扩展训练数据:我们知道增加训练样本的数量可以降低网络的过拟合,实验获得大量数据往往比较困难,我们可以通过人为的方式对已有的数据进行扩展,例如对于MINST数据,我们可以把数字旋转一个小的角度,数字没有变,但是图片的像素却发生了变化,这对神经网络而言就是新的训练数据。我们一般是通过应用反映真实世界变化的操作来扩展训练数据。

3.3权重初始化

        之前我们用的权重和偏置初始化的方法是将其归一化为均值为0,标准差诶1的高斯分布。但是这种初始化的方法很容易让隐藏层的神经元饱和,在使用了sigmoid激活函数时,导致\delta'(z)的值很小,学习缓慢。虽然我们使用了交叉熵代价函数,但是交叉熵代价函数只针对输出层神经元有用,解决这个的方法是用另一种方法初始化权重和偏置。我们使用均值为0标准差为1/\sqrt{n_{in}}的高斯分布初始化权重,其中,n_{in}表示输入神经元的个数。我们仍然使用均值为0标准差为1的高斯分布来初始化偏置。(偏置的初始值并不会对学习速度产生太大的影响)后面我们会看到,用这种新的初始化权重的方法,不仅对学习速度有所提升,而且有时候在最终性能上也有很大的提升。

3.4神经网络超参数的选择

        我们已经知道了,神经网络有学习率\eta,规范化参数\lambda,小批量数据的大小minibatch_size等超参数。本节主要讲解一些选择超参数的策略和技术。

学习率\eta:选择学习率的大小,首先要找到学习率的一个阈值,方法是先将学习率设置一个比较大的值,你会发现代价函数一开始就会震荡,然后将学习率减少10倍,直至一个学习率使得代价函数曲线一开始是下降的而不是震荡的。较为高级的策略是在训练的前期先选用一个比较大的学习率,在代价函数持续几个回合不下降的情况下,就将原始的学习率缩小10倍,依次进行一直到代价函数下降到一定程度或者学习率达到之前的1/1000或者1/10000这个倍数需要自己设置,不同情况可能不同。

规范化参数\lambda:建议先将规范化参数设为0调整好学习率之后,再用调整好的学习率去设置规范化参数。规范化参数从1开始,根据验证集上的性能按照10倍增加或减小,设置好规范化参数以后,再利用设置好的规范化参数去调整新的学习率。

这里要提到的一点是,现在已经出现了自动调整超参数的技术,叫做网络搜索(grid search),可以系统的对超参数的空间进行搜索。

3.5其他技术

3.5.1随机梯度下降的改进

我们前面已经看到了梯度下降法在神经网络学习过程汇总的作用,下面我们主要介绍两种在随机梯度下降算法的基础上进行改进的更新权重和偏置的算法,分别是Hessian 和 momentum 技术。

Hessian 技术:我们已知代价函数C是多个权重和偏置的函数,这里忽略偏置只看权重,假设w=w_1,w_2,w_3......,所以C=C(w)。这里我们借助泰勒展开公式,代价函数在点w处可以被近似为:

可以将 上式重新写为:

\nabla C表示梯度向量,H就表示Hessian矩阵,其中的第jk项为\partial^2C/\partial w_j \partial w_k,我们只取前两项对上式进行近似:

选择对上式进行最小化。我们期望从点w移动到点来减小代价函数的值。于是我们就找到了一种优化代价函数的方法:选择开始的点w,然后更行w到新点,其中矩阵H和梯度都是在点w处算出来的,然后再继续更新w。我们通过重复的使用改变量来改变w,\eta表示学习速率。

在理论和实践上都表明Hessian优化比随机梯度下降算法收敛速度快。但是Hessian技术在实践上很难应用原因是Hessian矩阵非常大。

基于 momentum 的梯度下降:直觉上看,Hessian技术的优点在于它不仅考虑了梯度,而且还考虑了梯度的变化信息(因为H矩阵里面包含有二阶导数)。基于momentum 的梯度下降的算法也是受此启发。它的主要思想是,引入了一个中间变量v,我们称之为速度,在改变w的时候,通过梯度先改变v,然后通过v再改变w,类似于力先改变速度,然后速度改变位置一样的道理。

\mu叫做momentum coefficient(动量系数)。

3.5.2其他的激活函数

tanh函数:使用tanh激活函数的神经元输出为

tanh函数的定义式为:

tanh函数和sigmoid函数之间存在着这样的关系:

tanh函数的函数曲线为:

修正线性单元(rectified linear neuron):ReLU,激活函数采用ReLU的神经元的输出为:

ReLU的函数表达式为:

函数图像为:

使用sigmoid函数的一个缺陷是,同一层的神经元的权重同时增加或减小,使用tanh或ReLU函数可以避免这个问题。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络与深度学习笔记——代价函数,规范化,过拟合 的相关文章

  • 从理论到实践,让你全面看懂OKR!

    转自 http blog mingdao com 3934 html OKR资料全集已上线 你可以点击这里获取下载 文 明道 夏英凯 去年4月份 明道开了第一次OKR会议 那是我第一次接触OKR 当时就从心里喜欢上了这种管理方法 没想到后来
  • 电脑删除的文件如何找回?找回删除的文件有3个方法…

    大家的电脑存放着各种各样的文件 不能说每个文件都非常重要 但如果丢失了的话 电脑删除的文件如何找回 对于找回删除的文件这一块大家估计也花了不少心思 倒不是说一定要非要找回不可 电脑中的文件即便不是非常重要的 但是如果到了想要用的时候又得重新
  • 【log4j2】下载、安装、使用

    目录 1 下载 2 安装 3 使用 1 下载 https logging apache org log4j 2 x download html 下载文件名 apache log4j 2 14 1 bin zip 2 安装 1 解压 apac
  • 用VScode+anaconda搭建Python环境

    Python的IDE有很多 自带的IDLE spyder pycharm等都可以 但我目前用得最上手的是VScode 搭载anaconda 优点就是写代码效率高 第三方库导入一次性到位 下面介绍安装和配置教程 安装VS code 细节可以参
  • iPhone手机连接蓝牙鼠标和蓝牙键盘

    iPhone手机升级了IOS13之后 无意中发现了一个有趣的功能 iPhone手机可以连接蓝牙鼠标 具体方式如下 首先 要买一个支持蓝牙功能的鼠标 我用的罗技M590 建议再买一个蓝牙键盘 打开手机蓝牙 和蓝牙鼠标建立连接 这一步鼠标的说明
  • lVS+keepalived集群

    lvs keepalived 需要四台虚拟机 LVS 主 DIP 10 0 0 31 VIP 10 0 0 99 LVS 备 DIP 10 0 0 32 VIP 10 0 0 99 WEB1 RIP 10 0 0 33 VIP 10 0 0

随机推荐

  • 好看视频在线下载

    有时候在网上看到漂亮的小姐姐 想下载下来怎么办 比如这位漂亮的小姐姐 点击下面的示例地址就可以看到 https haokan baidu com videoui page videoland context 7B 22nid 22 3A 2
  • QOpenglWidget屏幕坐标系转到vtk世界坐标系

    原文 QOpenglWidget屏幕坐标系转到vtk世界坐标系 QOpenglWidget屏幕坐标系转到vtk世界坐标系 前两天看到有人问vtk的坐标系和qt的坐标系不同 之前有用qt实现了下vtk的测量距离和测量角度 其中就用到了QOpe
  • 使用MATLAB搭建深度神经网络(DNN)

    使用MATLAB搭建深度神经网络 DNN 深度神经网络 Deep Neural Network DNN 是一种强大的机器学习模型 常用于解决图像识别 自然语言处理 语音识别等任务 在本文中 我们将使用MATLAB搭建一个简单的DNN 并提供
  • 异常分类

    异常数据挖掘其中又包含 时间序列和非时间序列 非时间序列主要为发现异常的点集 其中各事件的发生无先后顺序 一般的探测手法为使用距离度量进行聚类 分类等操作 发现事件中的离群点 时间序列各点 各时间的发生需要考虑先后顺序 各点 各事件之间存在
  • C++弱引用智能指针weak_ptr的用处

    weak ptr也是一个引用计数型智能指针 但是它不增加对象的引用计数 即弱引用 与之相对 shared ptr是强引用 只要有一个指向对象的shared ptr存在 该对象就不会析构 直到指向对象的最后一个shared ptr析构或res
  • 我也是从寒门走出来的,程序员这个职业是我最好的选择!

    本文原创作者是 雷小帅 禁止任何未授权形式转载 目录 我们是极其普通的一类人 平凡而坚毅的过去 努力而自信的向阳而生 本文是有感而发 少图 尽量用文字描述自己的感受 我们是极其普通的一类人 前段时间有位博士的论文致谢走红了 读完后有强烈的共
  • TCP/IP网络江湖——物理层护江山:网络安全的铁壁防线(物理层下篇:物理层与网络安全)

    TCP IP网络江湖 物理层护江山 网络安全的铁壁防线 物理层下篇 物理层与网络安全 引言 一 物理层的隐私与保密 1 1 加密技术的护盾 1 2 安全传输协议的密约 1 3 物理层的安全控制 1 4 面对未知威胁的准备 二 电磁干扰与抵御
  • 使用正则表达式爬虫抓取猫眼电影排行Top100

    目标站点分析 分析网址 首页 https maoyan com 点击榜单 https maoyan com board 点击Top100 https maoyan com board 4 目标站点为 https maoyan com boa
  • 工具 - windows(PowerShell) 常用命令

    1 拷贝cp命令 例子 PS D Project test jni gt cp libs arm64 v8a NetU VTest app src main jniLibs Recurse Force 备注 Recurse 递归到子目录 F
  • vuescroll-一款基于vuejs2.x的虚拟滚动条

    介绍 Vuescroll 一个功能强大 有多种模式的基于Vue js的滚动条插件 它的原理是创建 div 用于包裹要滚动的内容 操后操作容器的样式或者scrollTop或scrollLeft完成内容的滚动 设计它的目的是用来美化和增强你的滚
  • 2023年3月股份行GX评测盘点:招商银行稳居榜首,各项指标均居前列

    易观 2023 年3月GX评测数据显示 招商银行 平安口袋银行 中信银行位居行业Top 10 浦发银行 兴业银行 光大银行紧跟其后 股份行APP 用户体验 招商银行以绝对优势稳居第一 2023年3月股份行GX评测结果数据显示 在操作体验方面
  • Google的TCP BBR拥塞控制算法深度解析

    原作者 dog250 授权发布 重新整理 极客重生 hi 大家好 今天推荐一篇我认为在TCP BBR技术里面分析非常透彻的文章 希望大家可以学习到一些真正的知识 理解其背后的设计原理 才能应对各种面试和工作挑战 宏观背景下的BBR 1980
  • 利用Python进行简单的图像识别(验证码)

    这是一个最简单的图像识别 将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract image to string image 识别后将结果存入到本地的txt文件中 1 encoding utf 8
  • csol2服务器维护中 无法登陆游戏,csol2现在怎么登不上去?为什么?说服务...

    2016 07 08 00 48龚宁静 客户经理 CSOL金勋怎么抽的第一个建议 卡延迟 看过好多人分享经验说卡延迟出金的几率会很大 本人也有些体会 我家是10M的光纤 跟我开金少有关系 我想有很大关系 因为在活动期间 那屏刷的真叫一个快
  • Android开启和关闭护眼模式

    Android开启和关闭护眼模式 在现代社会中 我们经常长时间使用智能手机或平板电脑等电子设备 长时间盯着屏幕可能会对眼睛造成疲劳和不适 为了保护用户的眼睛健康 许多移动设备都提供了护眼模式 本文将介绍如何在Android设备上开启和关闭护
  • Element中的el-tree组件的懒加载和手动更新节点数据

  • 安装Windows10系统后,CPU 不再支持虚拟化解决方案

    小米的游戏本 之前是支持虚拟化的 安装过好几次虚拟机 最近重新安装了Windows10系统后 CPU不再支持虚拟化了 具体表现为安装VMWare失败 解决方案 小娜搜索并打开 启用或关闭Windows功能 把Hyper V的勾选去掉 因为它
  • Vue前端开发中的输入限制与输入规则探究

    前言 在Vue前端开发中 我们经常需要对用户的输入进行限制和规范 以确保数据的准确性和安全性 本文将介绍如何使用Vue的el input组件来实现输入限制和输入规则 并提供相应的代码示例 一 输入限制 最大长度限制 我们可以使用maxlen
  • 如何快速增加大量用户和用户组

    Windows平台下 假设建有Domain A和Domain B 两者已经建立了信任关系 可以采用在命令行中输入如下命令在各自的domain中增加用户或用户组 1 增加用户组FOR L i in 1 1 10 DO dsadd group
  • 神经网络与深度学习笔记——代价函数,规范化,过拟合

    神经网络与深度学习笔记系列一共有五个专题 分别是第一章使用神经网络识别手写数字 梯度下降算法是什么 主要介绍了神经网络的基础例如感知器激活函数等概念 最主要介绍了梯度下降算法 第二章反向传播算法如何工作 反向传播算法原理 主要介绍了反向传播