9-神经网络的学习机制
一、损失函数
均方误差
E = 1 2 ∑ k ( y k − t k ) 2 E = \frac{1}{2} \sum_k(y_k - t_k)^2 E=21k∑(yk−tk)2
- y k y_k yk : 表示神经网络的输出数据
- t k t_k tk:神经网络的监测数据
- k:表示数据维度
交叉熵误差
E = − ∑ k t k l o g ( y k ) E = -\sum_k t_k log (y_k) E=−k∑tklog(yk)
- log 为以 e 为底的对数
- y k y_k yk : 表示神经网络的输出数据
- t k t_k tk 为监测数据
-
当 t k t_k tk 为
one_hot
表示(即正确解用1表示,其余均用0表示),例如:y = [0.02, 0.04, 0.13, 0.03, 0.15, 0.14, 0.20,0.11,0.02,0.16] t = [0,0,1,0,0,0,0,0,0,0]
则表示第2个(从0开始)输出是正确的
y = 0.13
是正确的很容易看出,只有当 t k t_k tk 不为0时, t k l o g ( y k ) t_k log(y_k) tklog(yk) 才不会为0,也就是说,实际上,假设 y 0 y_0 y0 为正确解,则:
E = − l o g ( y 0 ) E = -log(y_0) E=−log(y0)
-
当 t k t_k tk 不是
one_hot
表示,而是用标签(指明输出的正确解是第几个)表示,例如:y = [0.02, 0.04, 0.13, 0.03, 0.15, 0.14, 0.20,0.11,0.02,0.16] t = 2
表示第2个(从0开始)输出
y = 0.13
是正确的,所以就可以利用公式 E = − l o g ( y 0 ) E = -log(y_0) E=−log(y0)来求交叉熵。因此, t k t_k tk是否采用
one_hot
表示,都用同一个公式。只不过,如果是用one_hot表示的话,只需要 直接tlog(y)
就可以计算出 l o g ( y 0 ) log(y_0) log(y0) ,而不使用 one_hot表示的话,就需要自己根据标签来把正确解 y 0 y_0 y0 找出来。
二、数值微分
导数
-
定义式
d f ( x ) d x = lim h → 0 f ( x + h ) − f ( x ) h \frac{df(x)}{dx} = \lim_{h\rightarrow0} \frac{f(x+h)-f(x)}{h} dxdf(x)=h→0limhf(x+h)−f(x)
表示函数 f ( x ) f(x) f(x) 在x处的斜率 -
为了减小计算误差,常使用下面的式子计算:
d f ( x ) d x = lim h → 0 f ( x + h ) − f ( x − h ) 2 h \frac{df(x)}{dx} = \lim_{h\rightarrow0} \frac{f(x+h)-f(x-h)}{2h} dxdf(x)=h→0lim2hf(x+h)−f(x−h)
偏导数
定义式:
∂
f
∂
x
=
lim
Δ
x
→
0
f
(
x
+
Δ
x
,
y
)
−
f
(
x
,
y
)
x
\frac{\partial f}{\partial x} = \lim_{\Delta x\rightarrow0} \frac{f(x+\Delta x,y)-f(x,y)}{x}
∂x∂f=Δx→0limxf(x+Δx,y)−f(x,y)
∂ f ∂ y = lim Δ y → 0 f ( x , y + Δ y ) − f ( x , y ) x \frac{\partial f}{\partial y} = \lim_{\Delta y\rightarrow0} \frac{f(x,y+\Delta y)-f(x,y)}{x} ∂y∂f=Δy→0limxf(x,y+Δy)−f(x,y)
第一条式子表示函数在点(x,y)处沿 x方向的斜率;
第二条式子表示函数在点(x,y)处沿 y方向的斜率。
梯度
表达式:
(
∂
f
∂
x
,
∂
f
∂
y
)
(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})
(∂x∂f,∂y∂f)
表示一个向量,该向量的方向指向函数增加最快的方向。
神经网络中一般使用负梯度,因为要计算损失函数的最小值。
梯度法
分为梯度下降法(寻找最小值)
和梯度上升法(寻找最大值)
执行梯度(下降)法寻找最优参数的过程:首先初始化参数当前值,然后求出函数在当前位置的梯度,之后前进一段位置,继续求梯度,继续前进……如此循环下去,知道寻找到最小值。
公式:
{
x
0
=
x
0
−
η
∂
f
∂
x
0
x
1
=
x
1
−
η
∂
f
∂
x
1
⎩⎪⎨⎪⎧x0=x0−η∂x0∂fx1=x1−η∂x1∂f
η
\eta
η 为学习率,表示参数更新的速率,它的值不能过大,否则越过了最小值都不知道;也不能过小,否则需要耗时过长。
本文来自博客园,作者:aJream,转载请记得标明出处:https://www.cnblogs.com/ajream/p/15383594.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人