把所有的輸入值縮放到一個大致相同的范圍可以顯著的加速加速。
(比如在θ1μ=0.5的時候,如果θ2的范圍很大,在每次都是相同的a進行運算,那就會多計算很多沒有用的θ2。如果把θ2的范圍縮放,那么會快很多。至于精確性,我也還沒有想明白這層關系)。
總的來說,因為θ會小取值范圍內(nèi)快速收斂而在大取值范圍內(nèi)低效率震蕩而導致緩慢收斂。所以,當變量都很不一樣的時候,會導致出現(xiàn)一個大范圍而震蕩緩慢收斂。因此,我們要將輸入變量進行縮放,是指在一個大致相同的范圍內(nèi)。
理想化結果: ?1 ≤ x(i) ≤ 1 或者 ?0.5 ≤ x(i) ≤ 0.5
這里沒有很明確的要求,就是大致縮放到同一個范圍內(nèi)就可以了。
特征值縮放 和 均值標準化
- 特征值縮放就是通過乘除來把輸入值調(diào)到期望的范圍(一般都是縮放到[-1,1])。
- 均值標準化就是通過把輸入值減去平均值來把數(shù)值變小。
這兩步驟之后不管多大的數(shù)值應該都會變到很小的值了。
公式 xi:=(xi?μi)/si
其中** μi 是所有特征 (i) 的均值**
si 是最大值與最小值之差(max - min), 或者標準差。
其實這種做法是在針對很大的數(shù)據(jù)集和很多參數(shù),這時候,除非你將學習速率a調(diào)到非常小然后通過很多很多次迭代消耗非常多的時間,要不然這是最好的方法。
因為學習速率與后面的偏導部分是對每次變化之后進行偏導,也就說它雖然一開始看起來縮放了范圍然后使兩個本來收斂速度不一樣的函數(shù)以相同速率收斂從而會導致誤差,但事實上,式子里的是通過偏導來重新計算每次迭代的收斂速率,所以可能會有誤差存在,但是并沒有想象中的那么大。
我的問題:
Q: 縮放的計算如果本來也只有個位數(shù),但是縮放均值話之后可能變成了小數(shù),對于電腦計算來說,是不是更加慢了? 也就是說,在某個特定情況下(應該平常遇到的訓練集的數(shù)據(jù)都是很大的吧),是不是可能會變得反而更加慢了?