以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏
文章目录
- 智能驾驶
- 高级优化方法
- 梯度下降算法回顾
- Adam算法(Adaptive Moment estimation)
- 模型部分
- 编译部分
- 拟合部分
之前我们已经学习了多分类问题的神经网络的搭建。而有一种特殊的分类问题,叫做多标签分类问题,它可以理解为一个图像里面有多个标签存在。让我们举个例子。
智能驾驶
在智能驾驶汽车中常常面临的问题是,你需要同时判断一幅图之中是否有汽车,是否有巴士,是否有行人。
例如在上图的第一幅图中,有汽车,没有巴士,有行人;第二幅图中,没有汽车,没有巴士,有行人;第三幅图中,有汽车,有巴士,没有行人。
在这种情况之下,输出的y就不仅仅是一个数值,而是由三个布尔值组成的向量,例如,左图的向量就应该为
[
1.0
,
1
]
[1.0,1]
[1.0,1]。这与手写数字识别不同,它的y仅仅是一个数字,尽管它可能有十个不同的取值。
所以,我们该如何解决多标签分类问题呢?
第一种方法,我们可以将三种物品看作三个不同的机器学习问题来分别进行判断。这其实是一种不太合理的方法。随着标签数量的增加,搭建神经网络的任务量也随之线性增加,当需要判断的物体很多时就不太能够实现了。
第二种方法,当然就是搭建一个神经网络,让它同时判断图中是否有汽车,是否有巴士,是否有行人。
神经网络的架构如上图,将特征矩阵输入隐藏层,再传入最终输出层;最终输出层具有三个神经元,均采用sigmoid函数作为激活函数,那么,这个神经网络的输出就应该是:
a
⃗
[
3
]
=
[
a
1
[
3
]
,
a
2
[
3
]
,
a
3
[
3
]
]
\vec{a}^{[3]}=[a_1^{[3]},a_2^{[3]},a_3^{[3]}]
a[3]=[a1[3],a2[3],a3[3]]
其中a1,a2,a3分别对应是否有汽车,是否有巴士,是否有行人。
多分类问题和多标签分类问题有时候会相互混淆,因此在本篇中详细讲述了多标签分类,从而帮助你能更好地分析问题。
关于分类问题就说到这里,下面主要讲讲神经网络中一些更加高级的概念,包括比梯度下降算法更加优化的算法。
高级优化方法
梯度下降算法是一种广泛应用于机器学习的优化算法,是线性回归和逻辑回归等许多算法以及神经网络早期实现的基础。但事实证明,现在还有一些其它的优化算法可以最小化成本函数,甚至比梯度下降更好。今天我们将了解其中的一种。
梯度下降算法回顾
以下是梯度下降算法的表达式:
w
j
=
w
j
−
α
∂
∂
w
j
J
(
w
⃗
,
b
)
w_j=w_j-\alpha\frac{\partial}{\partial w_j}J(\vec{w},b)
wj=wj−α∂wj∂J(w,b)
如图,在这个算法之中,可以看到算法一小步一小步向收敛点靠近,很明显,在这个例子中alpha可以设置得大一点。
而在这个例子之中,算法在收敛点两边反复横跳,且越跳越大,那在这里很明显alpha就显得过大了。
所以你可能会想到,我们为什么不找出一个算法,能够自动调整学习率呢?哈哈没错,这种算法叫做Adam。
Adam算法(Adaptive Moment estimation)
Adam算法并没有在全局使用统一的学习率。它对模型的每个参数均使用不同的学习率,所以假设你有十个不同的参数w1~w10,那么学习率就有
α
1
\alpha _1
α1~
α
10
\alpha _{10}
α10十个,那么b的学习率就是
α
11
\alpha_{11}
α11。
它的工作原理是,如果w_j或者b一直在朝着一个方向收敛,那么就增大alpha反之则减小alpha。至于Adam算法是如何实现这一点的,其实有点复杂,这超出了新手学习的范围,因此感兴趣可以自己了解。下面我们介绍下代码的写法:
模型部分
模型与之前完全相同:
model = Sequential([
tf.keras.layers.Dense(units=25, activation='sigmoid')
tf.keras.layers.Dense(units=15, activation='sigmoid')
tf.keras.layers.Dense(units=10, activation='linear')
])
编译部分
编译部分与之前十分相似,只是我们要在编译函数中添加一个参数,指定要用Adam优化器。
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=le-3),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits-True))
需要说明的是,Adam算法也需要初始指定一个学习率(这里指定的是0.001),当你实践这个代码时,有必要多试几个值。
拟合部分
model.fit(X, Y, epochs=100)
如今大部分的深度学习使用者基本都采用Adam算法,希望你也可以掌握。
为了给读者你造成不必要的麻烦,博主的所有视频都没开仅粉丝可见,如果想要阅读我的其他博客,可以点个小小的关注哦。