1、梯度下降
what is gradient
- 导数,derivative
- 偏微分 partial derivative
- 梯度,gradient
梯度是每一个轴的偏微分组合而成的向量
what does it mean
梯度的方向是函数值变大的反向
how to search
按照梯度反向更新
autograd
with tf.GradientTape()as tape:
[w_grad]=tape.gradient(loss,[w])
presistent GradientTape
可以再调用一次
实战案例
import tensorflow as tf
w = tf.Variable(1.0)
b = tf.Variable(2.0)
x = tf.Variable(3.0)
with tf.GradientTape() as t1:
with tf.GradientTape() as t2:
y = x * w + b
dy_dw, dy_db = t2.gradient(y, [w, b])
d2y_dw2 = t1.gradient(dy_dw, w)
print(dy_dw)
print(dy_db)
print(d2y_dw2)
assert dy_dw.numpy() == 3.0
assert d2y_dw2 is None
2、激活函数及其梯度
阶梯式的激活函数
该函数无法求导
sigmoid/logistic
sigmoid函数的导数
连续的光滑的,在0,1之间
取点:梯度在两端过于接近,梯度离散
Tanh
将x映射到[-1,1]区间
Rectified Linear Unit(RELU)整形的线性单元
小于0,不响应
大于0,线性相应
保持梯度不变,解决了sigmoid函数梯度离散和梯度爆炸的情况
x<0时,斜率小于1,大于0时,斜率为1
3、损失函数及其梯度
交叉熵用于分类较多
mse的梯度求解
- tape.watch([w,b])#如果w和b已经是variable形式就不需要这一步
- 将y做one-hot编码与prob通过tf.losses.MSE求总的误差再除以所有的N
输出的概率分布的累加应该为1,这点sigmoid函数无法做到。
softmax:将原本最大的输出变得更大
softmax的导数
i=j时
i != j 时
交叉熵求偏导
经过激活函数前的叫logits
给定输入x为两个样本,一个样本4个特征。所以权值对应特征也有4个,每个权值又有三个方向的值。
4、单输出感知机及其梯度
上方的数字表示layer的层数,下面的数字表示当前层数下的第几