码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
【Python深度学习】Python全栈体系(二十八)
深度学习
第三章 损失函数与梯度下降
一、损失函数
1. 什么是损失函数?
损失函数(Loss Function),也有称之为代价函数(Cost Function),用来度量预测值和实际值之间的差异。
E = y − y ′ E = y - y'
E
=
y
−
y
′
2. 损失函数的作用
度量决策函数f(x)和实际值之间的差异。
作为模型性能参考。损失函数值越小,说明预测输出和实际结果(也称期望输出)之间的差值就越小,也就说明我们构建的模型越好。
学习的过程,就是不断通过训练数据进行预测,不断调整预测输出与实际输出差异,使得损失值最小的过程
。
3. 常用损失函数
3.1 均方误差(Mean square error)损失函数
均方误差是
回归问题常用的损失函数
,它是预测值与目标值之间差值的平方和,其公式和图像如下所示:
3.2 交叉熵(Cross Entropy)
交叉熵是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息,在机器学习中用来作为分类问题的损失函数。假设有两个概率分布,
t k t_k
t
k
与
y k y_k
y
k
其交叉熵函数公式及图形如下所示:
二、梯度下降
1. 什么是梯度?
梯度(gradient)是一个向量(矢量,有方向),表示
某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大
。损失函数沿梯度相反方向收敛最快(即能最快找到极值点)。当梯度向量为零(或接近于零),说明损失函数到达一个极小值点,模型准确度达到一个极大值点。
2. 梯度下降
通过损失函数,我们将“寻找最优参数”问题,转换为了“寻找损失函数最小值”问题
。寻找步骤:
损失是否足够小?如果不是,计算损失函数的梯度。
按梯度的反方向走一小步,以缩小损失。
循环到第一步
这种按照负梯度不停地调整函数权值的过程就叫做“
梯度下降法
”。通过这样的方法,改变每个神经元与其他神经元的连接权重及自身的偏置,让损失函数的值下降得更快,进而将值收敛到损失函数的某个极小值。
3. 导数
导数定义:所谓导数,就是用来分析函数“变化率”的一种度量。其公式为:
导数的含义:反映变化的剧烈程度(变化率)
4. 偏导数
5. 学习率
如果在梯度下降过程中,每次都按照相同的步幅收敛,则可能错过极值点(下图左),所以每次在之前的步幅减小一定比率,这个比率称之为“学习率”(下图右)。
6. 梯度递减训练法则
7. 梯度下降算法
7.1 批量梯度下降
批量梯度下降法(Batch Gradient Descent,BGD)是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新。
优点:
一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。
缺点:
当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。
7.2 随机梯度下降
随机梯度下降法(Stochastic Gradient Descent,SGD)每次迭代使用一个样本来对参数进行更新,使得训练速度加快。
优点:
由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮的参数更新速度大大加快。
缺点:
准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
不易于并行实现。
7.3 小批量梯度下降
小批量梯度下降(Mini-Batch Gradient Descent,MBGD)是对批量梯度下降以及随机梯度下降的一个折中方法。其思想是:每次迭代使用指定个(batch_size)样本来对参数进行更新。
优点:
通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。
缺点:
batch_size的不当选择可能会带来一些问题。
8. 几种梯度下降算法收敛比较
三、小结
损失函数
:用于度量预测值和期望值之间的差异,根据该差异值进行参数调整。
梯度下降
:用于以最快的速度、最少的步骤快速找到损失函数的极小值。
第四章 反向传播算法
一、反向传播算法
1. 什么是正向传播网络?
前一层的输出作为后一层的输入的逻辑结构,每一层神经元仅与下一层的神经元全连接,通过增加神经网络的层数虽然可为其提供更大的灵活性,让网络具有更强的表征能力,也就是说,能解决的问题更多,但随之而来的
数量庞大的网络参数的训练,一直是制约多层神经网络发展的一个重要瓶颈
。
2. 什么是反向传播?
反向传播(Backpropagation algorithm)全称“误差反向传播”,是在深度神经网络中,根据输出层输出值,来反向调整隐藏层权重的一种方法。
3. 为什么需要反向传播?
为什么不直接使用梯度下降而使用反向传播方式更新权重呢?
梯度下降应用于有明确求导函数的情况,或者可以求出误差的情况(比如线性回归),我们可以把它看做没有隐藏层的网络。
但对于多个隐藏层的神经网络,输出层可以直接求出误差来更新参数,但隐藏层的误差是不存在的,因此不能对它直接应用梯度下降,而是先将误差反向传播至隐藏层,然后再应用梯度下降
。
4. 图解反向传播
5. 反向传播计算
考虑函数y=f(x),输出为E,反向传播的计算顺序是,
将信号E乘以节点的局部导数(偏导数),传递给前面的节点,这样可以高效地求出导数的值
。
6. 加法节点反向传播计算
7. 乘法节点反向传播计算
8. 链式求导法则
9. 案例:通过反向传播计算偏导数
二、小结
反向传播算法:目的是根据预测输出,调整权重参数,使得模型更快收敛。
链式求导法则
相关阅读:
【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析
自助式数据分析平台:JVS智能BI功能介绍(一)数据源
六、循环表达式
js_字符串
记录一次错误---想让U-net网络输入大小不一致的图片
服务器连接校园网
10大领域5大过程47子过程快速记忆
Power BI数据刷新 - 网关 & 数据源凭据详解
CSS - 移动端布局(一)关键的前置知识
深入理解Java消息中间件-RabbitMQ
原文地址:https://blog.csdn.net/sgsgkxkx/article/details/126253508
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | Kerberos协议及其部分攻击手法
0day的产生 | 不懂代码的"代码审计"
安装scrcpy-client模块av模块异常,环境问题解决方案
leetcode hot100【LeetCode 279. 完全平方数】java实现
OpenWrt下安装Mosquitto
AnatoMask论文汇总
【AI日记】24.11.01 LangChain、openai api和github copilot
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
正则表达式工具
cron表达式工具
密码生成工具
京公网安备 11010502049817号