文章目录
- 一、损失函数
- 均方误差
- 交叉熵误差
- 导数
- 偏导数
- 梯度
- 梯度法
一、损失函数
均方误差
E=12∑k(yk−tk)2E = \\frac{1}{2} \\sum_k(y_k – t_k)^2E=21k∑(yk−tk)2
- yky_kyk : 表示神经网络的输出数据
- tkt_ktk:神经网络的监测数据
- k:表示数据维度
交叉熵误差
E=−∑ktklog(yk)E = -\\sum_k t_k log (y_k)E=−k∑tklog(yk)
- log 为以 e 为底的对数
- yky_kyk : 表示神经网络的输出数据
- tkt_ktk 为监测数据
-
当 tkt_ktk 为
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
是正确的
很容易看出,只有当 tkt_ktk 不为0时,tklog(yk)t_k log(y_k)tklog(yk) 才不会为0,也就是说,实际上,假设 y0y_0y0 为正确解,则:
E=−log(y0)E = -log(y_0)E=−log(y0)
-
当 tkt_ktk 不是
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=−log(y0)E = -log(y_0)E=−log(y0)来求交叉熵。
因此,tkt_ktk是否采用
one_hot
表示,都用同一个公式。只不过,如果是用one_hot表示的话,只需要 直接
tlog(y)
就可以计算出 log(y0)log(y_0)log(y0) ,而不使用 one_hot表示的话,就需要自己根据标签来把正确解 y0y_0y0 找出来。
二、数值微分
导数
-
定义式
df(x)dx=limh→0f(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处的斜率 -
为了减小计算误差,常使用下面的式子计算:
df(x)dx=limh→0f(x+h)−f(x−h)2h\\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→0f(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→0f(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)
表示一个向量,该向量的方向指向函数增加最快的方向。
神经网络中一般使用负梯度,因为要计算损失函数的最小值。
梯度法
分为
梯度下降法(寻找最小值)
和
梯度上升法(寻找最大值)
执行梯度(下降)法寻找最优参数的过程:首先初始化参数当前值,然后求出函数在当前位置的梯度,之后前进一段位置,继续求梯度,继续前进……如此循环下去,知道寻找到最小值。
公式:
{x0=x0−η∂f∂x0x1=x1−η∂f∂x1\\begin{cases}x_0 = x_0-\\eta \\frac{\\partial f}{\\partial x_0}\\\\\\\\x_1 = x_1-\\eta \\frac{\\partial f}{\\partial x_1}\\end{cases}⎩⎪⎨⎪⎧x0=x0−η∂x0∂fx1=x1−η∂x1∂f
η\\etaη 为学习率,表示参数更新的速率,它的值不能过大,否则越过了最小值都不知道;也不能过小,否则需要耗时过长。