Chinese, Computer Science, Technology
Machine Learning Chinese NLP :::: Gradient Descent Feature Scaling
Gradient Descent Feature Scaling
在这段视频
以及下一段视频中
我想告诉你一些关于
梯度下降运算中的实用技巧
在这段视频中 我会告诉你一个称为特征缩放 (feature scaling) 的方法
我们用一个 for 循环
如果你有一个机器学习问题
这个问题有多个特征
如果你能确保这些特征
都处在一个相近的范围
我的意思是确保
不同特征的取值
在相近的范围内
这样梯度下降法就能更快地收敛
具体地说
假如你有一个具有两个特征的问题
其中 x1 是房屋面积大小
它的取值
在0到2000之间
x2 是卧室的数量
可能这个值
取值范围在1到5之间
如果你画出代价函数
J(θ) 的轮廓图
那么这个轮廓看起来
应该是像这样的
J(θ) 是一个关于
参数 θ0 θ1 和 θ2 的函数
但我要忽略 θ0
所以暂时不考虑 θ0
并假想一个函数的变量
只有 θ1 和 θ2
但如果 x1 的取值范围
远远大于 x2 的取值范围的话
那么最终画出来的
代价函数 J(θ) 的轮廓图
就会呈现出这样一种
非常偏斜
并且椭圆的形状
2000 和 5的比例
会让这个椭圆更加瘦长
所以 这是一个又瘦又高的
椭圆形轮廓图
就是这些非常高大细长的椭圆形
构成了代价函数 J(θ)
而如果你用这个代价函数
来运行梯度下降的话
你要得到梯度值 最终可能
需要花很长一段时间
并且可能会来回波动
然后会经过很长时间
最终才收敛到全局最小值
事实上 你可以想像 如果这些
轮廓再被放大一些的话
如果你画的再夸张一些
把它画的更细更长
那么可能情况会更糟糕
梯度下降的过程
可能更加缓慢
需要花更长的时间
反复来回振荡
最终才找到一条正确通往全局最小值的路
在这样的情况下
一种有效的方法是进行特征缩放(feature scaling)
具体来说
把特征 x 定义为
房子的面积大小
除以2000的话
并且把 x2 定义为
卧室的数量除以5
那么这样的话
表示代价函数 J(θ)
的轮廓图的形状
就会变得偏移没那么严重
可能看起来更圆一些了
如果你用这样的代价函数
来执行梯度下降的话
那么 梯度下降算法
你可以从数学上来证明
梯度下降算法 就会找到一条
更捷径的路径通向全局最小
而不是像刚才那样
沿着一条让人摸不着头脑的路径
一条复杂得多的轨迹
来找到全局最小值
因此 通过特征缩放
通过”消耗掉”这些值的范围
在这个例子中
我们最终得到的两个特征
x1 和 x2 都在0和1之间
这样你得到的梯度下降算法
就会更快地收敛
更一般地
我们执行特征缩放时 也就是我们经常
我们通常的目的是
将特征的取值约束到
-1 到 +1 的范围内
你的特征 x0 是总是等于1
因此 这已经是在这个范围内
但对其他的特征
你可能需要通过除以不同的数
来让它们处于同一范围内
-1 和 +1 这两个数字并不是太重要
所以 如果你有一个特征
x1 它的取值
在0和3之间 这没问题
如果你有另外一个特征
取值在-2 到 +0.5之间
这也没什么关系
这也非常接近
-1 到 +1的范围
这些都可以
但如果你有另一个特征
比如叫 x3
假如它的范围
在 -100 到 +100之间
那么 这个范围
跟-1到+1就有很大不同了
所以 这可能是一个
不那么好的特征
类似地 如果你的特征在一个
非常非常小的范围内
比如另外一个特征
x4 它的范围在
0.0001和+0.0001之间 那么
这同样是一个
比-1到+1小得多的范围
比-1到+1小得多的范围
因此 我同样会认为这个特征也不太好
所以 可能你认可的范围
也许可以大于
或者小于 -1 到 +1
但是也别太大
只要大得不多就可以接受
比如 +100
或者也别太小 比如这里的0.001
不同的人有不同的经验
但是我一般是这么考虑的
如果一个特征是在
-3 到 +3 的范围内
那么你应该认为
这个范围是可以接受的
但如果这个范围
大于了 -3 到 +3 的范围
我可能就要开始注意了
如果它的取值
在-1/3 到+1/3的话
我觉得 还不错 可以接受
或者是0到1/3 或-1/3到0
这些典型的范围 我都认为是可以接受的
但如果特征的范围
取得很小的话
比如像这里的 x4 你就要开始考虑进行特征缩放了
因此 总的来说
不用过于担心
你的特征是否在完全
相同的范围或区间内
但是只要他们都
只要它们足够接近的话 梯度下降法就会正常地工作
除了在特征缩放中
将特征除以最大值以外
有时候我们也会进行一个
称为均值归一化的工作(mean normalization)
我的意思是这样的
如果你有一个特征 xi
你就用 xi – μi 来替换
通过这样做 让你的特征值
具有为0的平均值
很明显 我们不需要
把这一步应用到
x0中
因为 x0 总是等于1的
所以它不可能有
为0的的平均值
但是
对其他的特征来说
比如房子的大小
取值介于0到2000
并且假如
房子面积
的平均值
是等于1000的
那么你可以用这个公式
将 x1 的值变为
x1 减去平均值 μ1
再除以2000
类似地
如果你的房子有
五间卧室
并且平均一套房子有
两间卧室 那么你可以
使用这个公式
来归一化你的第二个特征 x2
在这两种情况下
你可以算出新的特征 x1 和 x2
这样它们的范围
可以在-0.5和+0.5之间
当然这肯定不对
x2的值实际上肯定会大于0.5 但很接近
更一般的规律是
你可以用这样的公式
你可以用 (x1 – μ1)/S1
来替换原来的特征 x1
其中定义
μ1的意思是
在训练集中
特征 x1 的平均值
而 S1 是
该特征值的范围
我说的范围是指
最大值减去最小值
最大值减去最小值
或者学过
标准差的同学可以记住
也可以把 S1 设为
变量的标准差
但其实用最大值减最小值就可以了
类似地 对于第二个
特征 x2
你也可以用同样的这个
特征减去平均值
再除以范围 来替换原特征
范围的意思依然是最大值减最小值
这类公式将
把你的特征
变成这样的范围
也许不是完全这样
但大概是这样的范围
顺便提一下
有些同学可能比较仔细
如果我们用最大值减最小值
来表示范围的话 这里的5有可能应该是4
如果最大值为5
那么减去最小值1
这个范围值就是4
但不管咋说 这些取值
都是非常近似的
只要将特征转换为
相近似的范围 就都是可以的
特征缩放其实
并不需要太精确
只是为了让梯度下降
能够运行得更快一点而已
好的 现在你知道了
什么是特征缩放
通过使用这个简单的方法
你可以将梯度下降的速度变得更快
让梯度下降收敛所需的循环次数更少
这就是特征缩放
在接下来的视频中
我将介绍另一种技巧来使梯度下降
在实践中工作地更好
Sorry, the comment form is closed at this time.