文章目录
------------------------------第一部分:实习2020.06------------------------
1. 平安科技(实习)
1.1 如何检验求得得梯度是正确得
求导得数学定义为:
d d θ J = lim ϵ → 0 J ( θ + ϵ ) − J ( θ − ϵ ) 2 ϵ \frac{d}{d \theta} J=\lim _{\epsilon \rightarrow 0} \frac{J(\theta+\epsilon)-J(\theta-\epsilon)}{2 \epsilon} dθdJ=ϵ→0lim2ϵJ(θ+ϵ)−J(θ−ϵ)
由此我们可得梯度校验的数值校验公式:
d d θ J ≈ J ( θ + ϵ ) − J ( θ − ϵ ) 2 ϵ \frac{d}{d \theta} J \approx \frac{J(\theta+\epsilon)-J(\theta-\epsilon)}{2 \epsilon} dθdJ≈2ϵJ(θ+ϵ)−J(θ−ϵ)
在实际应用中,我们常将 ϵ 设为一个很小的常量,比如 1e−4 数量级,我们不会将它设得太小,比如 1e−20,因为那将导致数值舍入误差。
程序验证:
# 定义sigmoid函数
def sigmoid(x):
return 1/(1+np.exp(-x))
# sigmoid函数导数
def sigmoid_prime(x):
return sigmoid(x)*(1-sigmoid(x))
# 验证求梯度是否正确
def check_sigmoid(x, eposi):
return (sigmoid(x+eposi)-sigmoid(x-eposi))/(2*eposi)
x = np.array([1,2,3])
eposi = 1e-4
print(sigmoid_prime(x))
print(check_sigmoid(x, eposi))
输出
[0.19661193 0.10499359 0.04517666]
[0.19661193 0.10499359 0.04517666]
reference
机器学习算法的调试 —— 梯度检验(Gradient Checking)
1.2 随机梯度下降步长取值范围
以线性回归为例进行说明:
L ( θ ) = ( θ T X T − Y T ) ( X θ − Y ) L(\theta) = (\theta^TX^T-Y^T)(X\theta-Y) L(θ)=(θTXT−YT)(Xθ−Y)
对参数求导得:
d L ( θ ) d θ = X T ( X θ − Y ) \frac{dL(\theta)}{d\theta}=X^T(X\theta-Y) dθdL(θ)=XT(Xθ−Y)
梯度下降算法为:
θ n + 1 = θ n − α X T ( X θ n − Y ) \theta_{n+1}=\theta_n-\alpha X^T(X\theta_n-Y) θn+1=θn−αXT(Xθn−Y)
将该公式变换得:
θ n + 1 = F ( θ n ) = ( I − α X T X ) θ n + α X T Y \theta_{n+1} = F(\theta_n)=(I-\alpha X^TX)\theta_n+\alpha X^TY θn+1=F(θn)=(I−αXTX)θn+αXTY
当 θ \theta θ 收敛时,它是一个稳定点,即 θ = F ( θ ) \theta = F(\theta) θ=F(θ),解出 θ = ( X T X ) − 1 X T Y \theta = (X^TX)^{-1}X^TY θ=(XTX)−1XTY,与最小二乘法给出的结果一致。
按照非线性理论中的稳定性条件要求: ∣ F ′ ( θ ) ∣ < 1 |F^{'}(\theta)|<1 ∣F′(θ)∣<1,即 ∣ I − α X T X ∣ < 1 |I-\alpha X^TX|<1 ∣I−αXTX∣<1,因此 0 < α < 2 ( ∣ X T X ∣ ) − 1 0<\alpha<2(|X^TX|)^{-1} 0<α<2(∣XTX∣)−1;所以,当步长超出这个范围, θ \theta θ是不稳定的,很容易导致发散。
总结下就是,在求梯度下降得时候令 θ n + 1 = F ( θ n , α ) \theta_{n+1}=F(\theta_n, \alpha) θn+1=F(θn<