目录
1.1神经网络中的三个基本概念是:反向传播,梯度下降,损失函数。
1.1神经网络中的三个基本概念是:反向传播,梯度下降,损失函数。
1.1.1反向传播和梯度下降的基本工作原理是:
1)初始化
2)正向计算
3)损失函数为我们提供了计算损失的方法
4)梯度下降是在损失函数的基础上向着损失最小的点靠近而指引了网络权重调整的方向
5)反向传播把损失值反向传给神经网络的每一层,让每一层都根据损失值反向调整权重;
6)返回到2)直到精度足够小
梯度,是个矢量! 它应该即告诉我们方向,又告诉我们数值。
如果误差值是正数,我们就把权重降低一些;如果误差值为负数,则升高权重。
1.1.2 梯度下降的数学理解
梯度下降的数学公式:
θn+1=θn−η⋅∇J(θ)
其中:
- θn+1:下一个值;
- θn:当前值;
- −:减号,梯度的反向;
- η:学习率或步长,控制每一步走的距离,不要太快以免错过了最佳景点,不要太慢以免时间太长;
- ∇:梯度,函数当前位置的最快上升点;
- J(θ):函数。
梯度下降的三要素
- 当前点;
- 方向;
- 步长。
2.1损失函数的作用
就是计算神经网络每次迭代的前向计算结果与真实值的差距,从而指导下一步的训练向正确的方向进行
如何使用损失函数呢?
具体步骤:
1)用随机值初始化前向计算公式的参数
2)带入样本,计算输出的预测值
3)用损失函数计算预测值和真实值的误差
4)根据损失函数的导数,沿梯度最小方向将误差回传,修正前向计算公式中的各个权重值
5)重复第二步操作,直到损失函数值达到一个满意的值后停止迭代
2.1.1均方差损失函数
//# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
import numpy as np
from pathlib import Path
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import LogNorm
file_name = "../../data/ch03.npz"
def TargetFunction(x,w,b):
y = w*x + b
return y
def CreateSampleData(w,b,n):
file = Path(file_name)
if file.exists():
data = np.load(file)
x = data["data"]
y = data["label"]
else:
x = np.linspace(0,1,num=n)
noise = np.random.unif