2022吴恩达机器学习(Deep learning)课程对应笔记24
神经网络训练
更新时间:2023/03/21
继续以手写数字识别问题为例:
- 第一步是以Sequential的方式定义模型
- 第二步是指定loss function是什么,这里用的是二元交叉熵函数
- 第三步是开始开始训练模型,epoch是训练模型的轮数
模型训练细节
下面讲解一下逻辑回归模型的具体训练步骤:
- 确定模型的输入特征x和对应的参数 w w w和 b b b,计算模型的输出,也就是计算 f w ⃗ , b ( x ⃗ ) = ? f_{\vec{w},b}(\vec{x})=? fw,b(x)=?
- 指定模型具体的loss和代价函数,loss指的是一个样本的估计值与真实值之差,代价函数指的整个数据集中所有样本各自的估计值与真实值之间的差。
- l o s s = L ( f w ⃗ , b ( x ⃗ ) , y ) loss=L(f_{\vec{w},b}(\vec{x}), y) loss=L(fw,b(x),y)
- J ( w ⃗ , b ) = 1 m ∑ i = 1 m L ( f w ⃗ , b ( x ⃗ ) , y ) J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}L(f_{\vec{w},b}(\vec{x}), y) J(w,b)=m1∑i=1mL(fw,b(x),y)
- 训练数据更新参数,最小化
J
(
w
⃗
,
b
)
J(\vec{w},b)
J(w,b)
- w = w − α ∗ d j _ d w w=w-\alpha*dj\_dw w=w−α∗dj_dw
- b = b − α ∗ d j _ d b b=b-\alpha*dj\_db b=b−α∗dj_db
对比神经网络的学习过程如下
- m o d e l = S e q u e n t i a l . . . model = Sequential{...} model=Sequential...
- m o d e l . c o m p i l e ( l o s s = C r o s s e n t r o p y ( ) ) model.compile(loss=Crossentropy()) model.compile(loss=Crossentropy())
-
m
o
d
e
l
.
f
i
t
(
X
,
y
,
e
p
o
c
h
s
=
100
)
model.fit(X,y,epochs=100)
model.fit(X,y,epochs=100)
下面具体看每一步
第一步 创建模型
第二步 确定Loss和代价函数
分类用交叉熵loss,回归用平方误差loss
第三步 训练:梯度下降
不同的深度学习框架
激活函数的替代方案
一个常见的激活函数:
R
e
L
U
=
m
a
x
(
0
,
Z
)
=
m
a
x
(
0
,
w
⃗
x
⃗
+
b
)
ReLU=max(0,Z)=max(0,\vec{w}\vec{x}+b)
ReLU=max(0,Z)=max(0,wx+b)
下面不同的激活函数
- 线性激活函数: g ( z ) = z g(z)=z g(z)=z
- Sigmoid激活函数: g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1
- ReLU激活函数: g ( z ) = m a x ( 0 , z ) = m a x ( 0 , w ⃗ x ⃗ + b ) g(z)=max(0,z)=max(0,\vec{w}\vec{x}+b) g(z)=max(0,z)=max(0,wx+b)
如何选择激活函数
对于输出层的激活函数选择:
- 根据具体的任务而定:
- 对于分类任务一般会用sigmoid激活函数。
- 对于线性回归问题一般选择线性激活函数。
- 对于 y ^ \hat{y} y^只能取正值,毫无疑问选择ReLU激活函数。
对于隐藏层的激活函数选择:目前为止ReLU是最常用的选择()
- 选择ReLU的原因:
- 因为计算速度快。
- sigmoid有两个梯度很平缓的区间,梯度下降会很慢,而ReLU则只有一个平缓的地方
小结一下激活函数的选择
为什么模型需要激活函数
对于线性回归来说有没有激活函数都可以
但是如果没有激活函数,神经网络模型就只能解决线性模型,无法处理其它类型的模型
不要在隐层用线性激活函数