机器学习模型通过朝正确分类的方向更新其参数(权重和偏差)来学习。学习模型的基本结构,在下面的图片中,我们将展示机器学习模型的基本模块:
在这张照片上,我们可以检测到以下组件
1.训练数据集:基本上是包含训练数据的高速磁盘
2.一批样品:成对的列表(X,Y),由输入,预期输出组成,例如X可以是图像,Y可以是标签“ cat”
3.参数:模型图层用于将X映射到Y的一组参数
4.模型:将输入X和权重W转换为得分(可能为Y)的一组计算层
5.损失函数:负责说我们的得分与理想响应Y相差多远,损失函数的输出是一个标量。 另一种方法是考虑损失函数说您当前的参数集合W有多糟糕。
基本上,我们需要一种算法来改变我们的权重和偏差,以最小化我们的损失函数。
损失函数:
你可以将损失函数想象为一个有多山的地方,而你的目标是找到它的最低(最低)地方。 你唯一的仪器是可以返回您的海拔(损失)的小工具。 你需要找出要采取的方向。
在这里,我们还可以观察到两件事:
1、有多个淡谷(当地极小值)
2、根据着陆的位置,你可能会找到一个而不是另一个(权重初始化的重要性)
朝哪个方向走(梯度下降):
我们可以使用演算来发现应该采取的方向,例如,如果我们遵循损失函数的导数,则可以保证我们始终处于下降状态。 只需通过在该点评估的损失函数的导数减去当前的权重集即可。
在多个维度上,我们有一个偏导数向量,我们称其为梯度。观察到我们将梯度乘以一个因子(步长,学习率),该因子通常是一个小值,例如:0.001。
为了说明梯度下降法,让我们以一维中的简单情况为例。 考虑初始重量(-1.5):
在matlab上的实现:
我们可以观察到,在使用微积分找到损失函数的导数之后,我们只需要使用当前权重对其进行评估。 之后,我们仅从当前权重中获取评估值。
使用较高的学习率可以加快收敛速度,但也可以使梯度下降振荡甚至发散:
数值梯度:
评估梯度的慢方法,但是我们可以使用它来验证我们的代码是否正确,以下为迷你批次梯度下降:
无需遍历所有训练集来计算损失,而是进行梯度下降,我们可以分小批进行。 这将导致相似的结果,同时计算速度更快。 通常,最小批处理大小取决于GPU内存的大小。
如果你分析随时间的损耗衰减,则全批次版本的噪声较小(因为每次更新权重时我们都选择最佳的下降方向),但它的长度更长且难以计算。在另一个极端,如果你的小批量大小为1,则意味着要计算每个样本的梯度下降。 在这种情况下,我们称为随机梯度下降。
这在实践中相对较不常见,因为在实践中,由于矢量化代码优化,计算100个示例的梯度比计算一个示例的梯度100倍的计算效率更高。 同样,使用更大的批量时,我们更有可能估计真实的梯度。