# [cs231n (七)神经网络 part 3 : 学习和评估 ][1]

2023-12-27 10:38

本文主要是介绍# [cs231n (七)神经网络 part 3 : 学习和评估 ][1],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

cs231n (七)神经网络 part 3 : 学习和评估

标签(空格分隔): 神经网络

文章目录

  • [cs231n (七)神经网络 part 3 : 学习和评估 ][1]
  • 同类文章
  • 0.回顾
  • 1.引言
  • 2. 梯度检验
  • 3. 做到:合理性检查
  • 4. 接下来检查整个学习过程
      • 1. 损失函数
      • 2. 训练和验证集精度
      • 3. 权重更新
      • 4. 层激活数及梯度分布情况
  • 5. 参数更新
      • 1. 随机梯度下降
      • 2. 学习率退化
      • 3. 二阶法
      • 4. 逐层层自适应学习率:Adagrad、RMSprop
  • 6. 超参数优化
  • 7. 评估([集成模型][17])
  • 8. 总结
  • 9. 附录拓展
  • 转载和疑问声明
  • 我祝各位帅哥,和美女,你们永远十八岁,嗨嘿嘿~~~

同类文章

cs231n (一)图像分类识别讲了KNN
cs231n (二)讲了线性分类器:SVM和SoftMax
cs231n (三)优化问题及方法
cs231n (四)反向传播
cs231n (五)神经网络 part 1:构建架构
cs231n (六)神经网络 part 2:传入数据和损失
cs231n (七)神经网络 part 3 : 学习和评估
cs231n (八)神经网络总结:最小网络案例研究
cs231n (九)卷积神经网络


0.回顾

cs231n (一)图像分类识别讲了KNN
cs231n (二)讲了线性分类器:SVM和SoftMax
cs231n (三)优化问题及方法
cs231n (四)反向传播
cs231n (五)神经网络 part 1:构建架构
cs231n (六)神经网络 part 2:传入数据和损失

1.引言

之前入门了一个两层的神经网络,基本就是网络框架,现在就需要好好优化网络了,来打开电脑开干哈、、、么么哒~

2. 梯度检验

意不意外、惊不惊喜? 我有出现了、
其实这里就一点:用中心化公式更好

d f ( x ) d x = f ( x + h ) − f ( x ) h ( b a d ) \displaystyle \frac{df(x)}{dx}=\frac{f(x+h)-f(x)}{h} (bad) dxdf(x)=hf(x+h)f(x)(bad)
按照定义h是一个趋近于零的数值,目前计算机的能力下:近似为1e-5

d f ( x ) d x = f ( x + h ) − f ( x − h ) 2 h ( i n s t e a d ) \displaystyle \frac{df(x)}{dx}=\frac{f(x+h)-f(x-h)}{2h}(instead) dxdf(x)=2hf(x+h)f(xh)(instead)

反正目前来说就是:费力(耗费计算能力)不讨好!

关于梯度检验我们需要掌握几点:

  • 使用双精度计算会降低误差
  • 保持小数的有效数值 看《电脑科学家应该知道的浮点运算》
  • 目标函数不可导的时候也会影响梯度精度的
  • 使用数据少点:笨啊,因为这样不可导的数据点就越少啊
  • 梯度检验期间最好是不要使用正则化
  • 不要使用dropout和数据增强(augmentation)
  • 等待梯度开始下降后再开始梯度检查
  • 检查部分维度:假设其他维度是正确的
  • 步长h的设置:一般是1e-4 ----> 1e-6 为什么?

看了这张图就知道为什么了。

梯度

3. 做到:合理性检查

  • 特定情况下的损失值应该合理
  • 是否是因为提高了正则化强度之后导致的损失值变大
  • 小数据的过拟合:不要用正则化,使用20个数据应该能达到损失是零

4. 接下来检查整个学习过程

其实就是跟踪一些重要的参数,从而达到修改超参数的便利, 比如:每个epoch的loss

1. 损失函数

损失值跟踪: 可以得到不同学习率下的损失值变化情况

1

左边:不同学习率下的loss变化,右边:随着epochloss的变化

loss震荡程度和batch size有关系哦,当size=1 震荡程度就会很大,当size=N也就是整个数据,那么震荡最小

2. 训练和验证集精度

紧接着需要跟踪的另一个指标就是:验证和训练集的准确率,看下图

2

  • 训练集和验证集之间的空隙说明:模型的过拟合程度 验证集的准确率很低,说明模型严重过拟合, 此时应该增大正则化强度(正则化项、dropout、增加数据)
  • 再则就是验证曲线和训练曲线很接近,说明模型容量太小,应该增加参数数量。

3. 权重更新

最后一个指标就是:权重值更新了的数量和全部值的比

这个比例应该在1e-3左右,如果小,说明学习率小,如如果大,说明学习率太大。

# assume parameter vector W and its gradient vector dW
param_scale = np.linalg.norm(W.ravel())
update = -learning_rate*dW # simple SGD update
update_scale = np.linalg.norm(update.ravel())
W += update # the actual update
print update_scale / param_scale # want ~1e-3

4. 层激活数及梯度分布情况

初始化问题,梯度消失或者nan值,解决办法:得到网络中所有层的激活数据及梯度分布,观测数据结果, 我们看一下下面的图就知道了。

对于图像数据,我们可视化第一层特征。

3

左边:特征乱七八糟,网络应该是没有收敛,学习率不当,正则化权重太低
右边:特征明显,种类多,好图。

5. 参数更新

当我们使用BP计算梯度以后,梯度就可以更新了,那么如何更新呢?

1. 随机梯度下降

  • 一般更新沿着负梯度调参

  • x += - learning_rate * dx 比如 : α \alpha α = 0.05

  • 动量更新新方法,在深度学习中总是能快速收敛
    从物理角度讲,想象一座高山,高度势能是U=mgh,so: U ∝ h U\propto h Uh

质点所受的力与梯度的能量 ( F = − ∇ U ) (F=-\nabla U) F=U有关,**其实就是保守力就等于势能的负梯度!!!**物理专业的骄傲哈哈、

而又因为: F = m a F = ma F=ma 所以有:

# 动量法
v = mu * v - learning_rate * dx # 融合速度
x += v # 融合位置

引入参数 muv , 前者就是动量咯,最后结论:mu = [0.5,0.9,0.95,0.99]
要注意mu不是恒定不变的,一般是从0.5慢慢提升至0.99

  • Nesterov动量 理论上更有比较好的支持,实践下比上述动量还好。

当向量位于某个位置x时,mu * v 会轻微改变参数向量,因此计算梯度时,应该计算x + mu * v就更有意义???

4

动量将会把我们带到绿色箭头的位置,那么应该再向前看一些。

就知道你听的一头雾水

x_ahead = x + mu * v
# 计算dx_ahead(x_ahead处的梯度)
v = mu * v - learning_rate * dx_ahead
x += v

实际中改写x_ahead = x + mu * v就懂了。

x += -mu * v_prev + (1 + mu) * v && v_prev = v
x += v
v_prev = v # back this up
v = mu * v - learning_rate * dx # velocity update stays the same
x += -mu * v_prev + (1 + mu) * v # position update changes form

这是Yoshua Bengio的文献

2. 学习率退化

  • **随epoch衰减:**一般是每5个epoch减少一半,看验证集的错误率停止下降,就乘常数,降低学习率。

  • 指数衰减: α = α 0 e − k t \alpha=\alpha_0e^{-kt} α=α0ekt

  • 1/t衰减: α = α 0 / ( 1 + k t ) \alpha=\alpha_0/(1+kt) α=α0/(1+kt)

α 0 \alpha_0 α0,k:超参数,t:迭代次数
随步数衰减的随机失活(dropout)更受欢迎

3. 二阶法

还有最优化方法是基于牛顿法的:

x ← x − [ H f ( x ) ] − 1 ∇ f ( x ) \displaystyle x\leftarrow x-[Hf(x)]^{-1}\nabla f(x) xx[Hf(x)]1f(x)

其中 H f ( x ) Hf(x) Hf(x)是Hessian矩阵, 这里是没有学习率这个参数或者说概念的, 这个方法啊,少用。

4. 逐层层自适应学习率:Adagrad、RMSprop

Adagrad:一个由Duchi等人提出适应学习率算法

跟踪每个参数的平方和, 必须加平方根

接收到高梯度值的权重更新的效果被减弱,而接收到低梯度值的权重的更新效果将会增强

eps防止出现0的情况
缺点:学习率太激进,容易过早停止学习。

RMSprop 高效,且没被发表的适应性学习率法,Hinton coursera

就是去除了Adagrad的缺点,慢慢降低了学习率。

cache =  decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)

超参数decay_rate,多用[0.9,0.99,0.999]

# Assume the gradient dx and parameter vector x
cache += dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)

Adam RMSProp的动量版

m = beta1*m + (1-beta1)*dx
v = beta2*v + (1-beta2)*(dx**2)
x += - learning_rate * m / (np.sqrt(v) + eps)

论文中推荐的参数值eps=1e-8, beta1=0.9, beta2=0.999

5d

6d

RMSProp更新, 方法中的分母项, 所以动量类的可以继续前进

图片版权:Alec Radford。

6. 超参数优化

总结一下:

  • 初始化学习率
  • 学习率衰减
  • 正则化强度

交叉验证最好使用一个验证集
超参数的范围:learning_rate = 10 ** uniform(-6, 1) dropout=uniform(0,1)

随机选择好于网络搜索

7

大范围搜索——————>>>贝叶斯超参数优化

7. 评估(集成模型)

提升准确率的办法: 训练独立几个模型,然后平均结果
模型设置多个记录位点: 记录网络值。
跑参数平均值:也可以提上几个百分点,对网络的权重进行备份。

8. 总结

训练网络:

  1. 小批量梯度检查
  2. 小批量期间得到100%准确率
  3. 跟踪损失准确率以及第一层权重可视化
  4. 权重更新方法:SGD+Nesterov动量法,Adam法
  5. 学习率衰减
  6. 随机搜索超参数
  7. 集成模型(比赛得奖的几乎都用了集成)

9. 附录拓展

Leon Bottou:《SGD要点和技巧》。

Yann LeCun:《Efficient BackProp》。

Yoshua Bengio:《Practical Recommendations for Gradient-Based Training of Deep Architectures》

( y − X w ) T ( y − X w ) (y-Xw)^T(y-Xw) (yXw)T(yXw)
= ( y T − w T X T ) ( y − X w ) = (y^T-w^TX^T)(y-Xw) =(yTwTXT)(yXw)
= y T y + y T − ( w T X T ) y + w T X T ( X w ) = y^Ty + y^T - (w^TX^T)y + w^TX^T(Xw) =yTy+yT(wTXT)y+wTXT(Xw)
= y T y − y T ( X w ) − ( X w ) T y + w T ( X T X ) w = y^Ty - y^T(Xw) - (Xw)^Ty + w^T(X^TX)w =yTyyT(Xw)(Xw)Ty+wT(XTX)w
= y T y − 2 w T ( X T y ) + w T ( X T X ) w = y^Ty - 2w^T(X^Ty) + w^T(X^TX)w =yTy2wT(XTy)+wT(XTX)w

A T B = B T A ? A^TB = B^TA ? ATB=BTA


转载和疑问声明

如果你有什么疑问或者想要转载,没有允许是不能转载的哈
赞赏一下能不能转?哈哈,联系我啊,我告诉你呢 ~~
欢迎联系我哈,我会给大家慢慢解答啦~~~怎么联系我? 笨啊~ ~~ 你留言也行

你关注微信公众号1.机器学习算法工程师:2.或者扫那个二维码,后台发送 “我要找朕”,联系我也行啦!

(爱心.gif) 么么哒 ~么么哒 ~么么哒
码字不易啊啊啊,如果你觉得本文有帮助,三毛也是爱!

我祝各位帅哥,和美女,你们永远十八岁,嗨嘿嘿~~~

这篇关于# [cs231n (七)神经网络 part 3 : 学习和评估 ][1]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/542847

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个