激活函数与loss函数
激活函数
$$
y=f(\sum_{i=1}^nw_ix_i+b)
$$
此f()为激活函数,输入为前一层所有输出的加权和再加上一个偏执b
sigmoid
$$
f(x)=\sigma(x)=\frac{1}{1+ e^x}\
$$
$$
\frac{\partial f(x)}{\partial x}=f(x)(1-f(x))
$$
优点:求导简单,数据可压缩到(0,1)
缺点:梯度离散,输入很大时输出太平缓
调用指令torch.sigmoid()
Tanh
$$
f(x)=tanh(x)=\frac{(e^x-e^{-x})}{(e^x+e^{-x})}
=2sigmoid(2x)-1
$$
$$
\frac{\partial f(x)}{\partial x}=1-tanh^2(x)
$$
调用指令torch.tanh()
ReLU
$$
f(x)=\begin{cases}0\ for\ x<0 \\
x\ for\ x\geq0\end{cases}
$$
调用指令torch.relu()
Loss函数
MSE
$$
loss_i=\sum(y_i-\bar y_i)^2=norm((y_i-\hat y_i),2)^2
$$
调用指令 torch.nn.functional.mse_loss($y,\hat y$')
自动求导:
方法一
1. 首先对需要求导的参数使用requires_grad_()
方法标明需要求导
2. 计算mse:torch.nn.functional.mse_loss($y$,$\hat y$)
3. 使用torch.autograd.grad(mse,[w])
对其进行求导
方法二
-
首先对需要求导的参数使用
requires_grad_()
方法标明需要求导 -
计算mse:torch.nn.functional.mse_loss($y,\hat y$)
-
调用
mse.backward
该指令会计算mse对所有已设置需要求导变量的梯度 -
调用
w.grad
显示梯度backward设置(retain_graph=True)才可以再一次调用,不设置则会报错
import torch.nn.functional as F |
Softmax
$$
softmax(y_i)=\frac{e^{y_i}}{\sum_ je^{y_j}} \
$$
$$
\frac{\partial softmax(y_i)}{\partial y_j}=\begin{cases}softmax(y_i)(1-softmax(y_j))\ \ if\ i=j\\
-softmax(y_i)softmax(y_j)\ \ \ \ \ \ \ \ \ if\ i\neq j\end{cases}
$$
优点:将输出label的probability压缩到(0,1),且所有probability之和为1,原数据间隔拉大
调用指令 torch.nn.functional.mse_loss(y,dim=x)
交叉熵
$$
H(P,Q)=-\sum_{i=1}^nP(i)logQ(i)
$$
通常用于分类问题
调用指令 torch.nn.functional.cross_entropy(logits,y)
或者
pred=torch.nn.functional.softmax(logits,dim=1) |
cross_entropy=softmax→log→nll_loss
#一个二元二次函数梯度下降求极值算法
#一个二元二次函数梯度下降求极值算法 |
#运算结果 |
##一个交叉熵多分类问题
##一个交叉熵多分类问题 |