1. 程式人生 > >機器學習筆記三:梯度下降

機器學習筆記三:梯度下降

一.迭代思想

這裡要寫的其實跟主題梯度下降是沒有關係的。但是它能夠讓非常新的新手體會迴圈往復的迭代修改一個或者多個值到最優的思想。所以這裡把這個列到最開始,隨便看看體會一下就行了。

假設我們現在要來求解一個線性方程組,
這裡寫圖片描述
這個方程組很容易,可以用各種方法來解.精確的解容易求出來為這裡寫圖片描述
現在我們把原來的方程記為另外一種形式:
這裡寫圖片描述
寫為向量形式為這裡寫圖片描述,其中
這裡寫圖片描述
現在任意取初始值,比如這裡寫圖片描述,然後將這個初始值帶入到上面的公式中,那麼求得方程組第一次迭代方程組的解,得到新的值這裡寫圖片描述…..然後一直迭代下去。
在這裡,迭代其實就是
這裡寫圖片描述
這裡寫圖片描述
迭代10次之後得到:這裡寫圖片描述

下面用Python直觀的驗證一下
這裡寫圖片描述
結果為
這裡寫圖片描述

結果逼近於精確的結果.得到的誤差曲線為
這裡寫圖片描述
可以看出,在第三次迭代之後誤差就已經很小了.
到這裡,你應該對於迭代有一個感性的認識了。迴圈往復不停迭代而已。

二.梯度下降法

梯度下降法應該是你在機器學習裡面經常聽說的名詞了,那麼怎麼理解梯度下降法呢?
首先先講講抽象的理論上的東西。

Ⅰ.實值函式相對於實向量的梯度

定義:以n×1實向量x為變數的實標量函式這裡寫圖片描述相對於x梯度為一個n×1列向量,定義為:
這裡寫圖片描述
從定義可以看出來

(1)一個以向量為變數的標量函式的梯度也是一個向量。
(2)梯度的每個分量給出了標量函式在該分量方向上面的變化率。

Ⅱ.理論理解梯度下降法

假設我們有一個函式F(x),我們的目標是構造優化F(x)的演算法.優化的目標是求出使得F(x)最小化的x的值.(接下來要將的所有的演算法都是迭代的.)
首先,給定一個初試猜測值這裡寫圖片描述,然後按照等式:
這裡寫圖片描述
或者
這裡寫圖片描述
逐步修改我們的猜測.
其中:

這裡寫圖片描述是一個向量,代表一個搜尋方向.
大於零的標量α表示學習速度(確定學習步長)

當使用上面的Ⅰ式進行最優點迭代的時候,函式應該在每次迭代後都減小.
這裡寫圖片描述
在知道了學習速度這裡寫圖片描述的情況下,那麼如何選擇搜尋方向這裡寫圖片描述使得迭代快速收斂呢?
首先把函式一階泰勒展開.
這裡寫圖片描述
其中
這裡寫圖片描述
為在舊猜測值這裡寫圖片描述的梯度.
又必須使得這裡寫圖片描述,那麼必須有這裡寫圖片描述,前面已經講過這裡寫圖片描述大於零.那麼這裡寫圖片描述
滿足上式的任意一個向量這裡寫圖片描述

都被稱為一個下降方向.但是我們要找的是使得下降最快的下降方向.很容易知道這裡寫圖片描述為梯度和方向向量之間的內積.當方向向量與梯度剛好反向的時候,這時候負的絕對值最大.即
這裡寫圖片描述
然後就可以代到上面的(I)式,得到
這裡寫圖片描述
這個就是最速下降法的表示式了.

Ⅲ.形象的例子

理論上面弄了那麼久,很抽象很容易暈。那麼看幾個形象例子來加強一下理解。
首先考慮一個變數的情況。
假如你現在有一個凸目標函式J(x)如下圖,你想要求它的最小值。
這裡寫圖片描述
假如你是在左邊那個點上面(畫出了切線和函式相交的那個點),你要往最小值的那個地方跑,你肯定不能夠往上面跑對吧。要是你高中學過物理的話,你就會知道,你必須完全把速度用到切線的方向上面你才能夠最快的到最小值。為什麼呢?因為要是你的速度在其他的方向,最後算是你往下的速度只是你一開始速度的一個分量。那麼肯定就沒有那麼大的速度往最小值走了對吧。
我們又知道,在一個點的切線方向就是導數的方向。你從上面的圖來看的話,在最小值點處的導數是0,然後最小值左邊的導數都小於0,最小值右邊的導數都大於0.(這裡別問我為什麼)。
對於左邊那個點的橫座標,是應該加上該點導數的值還是應該減去該點導數的值才能夠往最小值的橫座標移動呢?如果x值要往右邊移動,需要加上一個正的數,又因為這裡的導數是小於0的,那麼就需要減去導數值。最終對於左邊這個點來說是要減去導數的值才能夠向最小值移動。
對於右邊那個點,想去最小值那麼x需要往左邊移動,因為該點的導數是大於0的,那麼往左邊移動需要減去導數的值。那麼還是需要減去導數的值

那麼再舉兩個變數的情況
這裡寫圖片描述
參考之前對於梯度的定義,一個梯度本質上面是一個向量,向量意味著自帶方向。梯度的方向你可以理解為在該點變化最快的方向。形象一點來說,你想快點下山的話,是走那種緩慢的盤山公路還是走最劇烈的地方?假如你有10000條命…..

有了形象的思維,就很容易推廣到多個變數巴拉巴拉上面去了。無非是求出梯度,然後用帶點的座標加上負梯度就行了。

三.梯度下降和隨機梯度下降

前面已經說過了梯度下降的形式。我們需要的一個待優化的函式,能夠求出他的梯度,然後按照他的方式去更新就行了。
為了方便理解,這裡就用上節的線性迴歸為例子,上節的線性迴歸更多的是數學推導。這節用講非常重要的用梯度下降的方法來“學習”到上節的引數w和b。而不是通過推匯出未知引數的方式來得到。
上節的例子已經講過背景了。
這裡重新設定一般的線性方程為:
這裡寫圖片描述
這裡這裡寫圖片描述就是我們要“學習”的未知引數(權重)了。
這裡寫圖片描述簡化,寫成矩陣形式:
這裡寫圖片描述
還記得上節定義的怎麼找到最合適的引數的那個“評估函式”嗎?我們把它寫為這個樣子:
這裡寫圖片描述
本質和之前的那個是一模一樣的,只是係數和一些符號變了而已。這裡的m表示的樣本的數量,m個樣本(m個輸入向量)。加了一個係數2是為了接下來的求偏導消掉,這樣更加簡潔。至於加了一個2有影響嗎?肯定是沒有的。
我們把這個函式叫做損失函式(loss function),還有的地方叫做其他的函式目標函式什麼的,都是一個意思。我們的目標就是是這個函式最小化,達到最優,即
這裡寫圖片描述
有根據梯度下降的思想,求最小值有
這裡寫圖片描述
那麼我需要把每個引數的偏導求出來,那麼帶進去迭代就能夠得到最終的未知引數值了,這裡直接推導:
這裡寫圖片描述
這裡就求出了未知引數上面的偏導,是不是非常的簡潔?從公式裡面看出,如果我們自定義的引數模型和y的差別很小,那麼這次“學習”迭代可以改進的範圍就很小。要是差別很大,那麼改進的範圍也會變大。這是很符合人的邏輯思維的。
那麼這個問題最終的梯度下降形式如下:
這裡寫圖片描述
那麼到底梯度下降和隨機梯度下降有什麼區別呢?
區別就在最後那一步對於樣本的選擇。

Ⅰ.梯度下降

原始的梯度下降就是把上面得到的不加修改的拿過來。演算法可以寫成這個樣子。
這裡寫圖片描述
也就是說,這個演算法一次性把所有的樣本都拿過來進行梯度下降的迭代了。
舉例子能夠更加形象一點看清楚每個細節。還是上節那個奧運會的資料,直接拿過來。
這裡寫圖片描述
我把100m時間作為y,年份作為x.雖然這裡x只有一個維度,但是還是會按照很擴充套件的方式寫程式碼。方便高維的推廣。
程式碼:

Ⅱ.隨機梯度下降法

原始的梯度下降法有一個缺點,那就是需要把所有的樣本全部都加起來,一次性修改梯度。好處就是簡單粗暴,直觀容易理解。
但是假如要訓練的樣本很多很多呢?當樣本非常非常大量的時候,這樣是很耗記憶體的。肯定不是一個非常好的方法。
所以,我們想到了從樣本中隨機選擇一小部分樣本用同樣的方式來估計得到剃度值,這裡我們假設損失函式為C,樣本為X,下面的這個式子就用來估計梯度。
這裡寫圖片描述
這個公式的意思就是,我們從樣本中隨機選擇m個樣本,然後他的梯度的平均值約等於所有樣本算出來的梯度的平均值,就用這個式子來計算梯度。那麼隨機梯度下降可以寫為下面的形式:
這裡寫圖片描述
假設一個數據集有N個樣本,我們首先隨機選擇其中的m1個樣本訓練,然後從其其餘的樣本中隨機選擇m2個樣本訓練,直到最後剩下m個樣本選完(N=m1+m2+….+m)。這樣一個過程成為一個epoch(我不知道怎麼翻譯)。然後在進行下一輪epoch,一直到訓練完成。
這就是隨機梯度下降的思想啦。

相關推薦

機器學習筆記梯度下降

一.迭代思想 這裡要寫的其實跟主題梯度下降是沒有關係的。但是它能夠讓非常新的新手體會迴圈往復的迭代修改一個或者多個值到最優的思想。所以這裡把這個列到最開始,隨便看看體會一下就行了。 假設我們現在要來求解一個線性方程組, 這個方程組很容易,可以用各種方法

機器學習筆記之六——梯度下降推導之BGD、SGD、MBGD

BGD(批梯度下降,又稱全量梯度下降)為標準梯度下降套路,但是速度慢,每一次更新引數Θ都需要遍歷所有樣本。 SGD(隨機梯度下降)求速度,每一次更新引數Θ只去遍歷一個樣本。 MBGD(小批量梯度下降)取兩者中庸,每次更新Θ,取一部分樣本來遍歷。 具體解釋如下:   

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

一、引入        在前幾節課我們講到,我們希望能夠找到曲線擬合效果最好的線條,這樣的線條的誤差最小,所以就轉化成了下面這幅圖所表達的內容。        我們有一些函式,這些函式會有n個引數,我們希望能得到這個函式的最小值,為了方便計算,我們從最簡單的入手,讓引數的個數

Andrew Ng 機器學習筆記 15 大資料集梯度下降

隨機梯度下降 隨機梯度下降原理 小批量梯度下降 小批量梯度下降vs隨機梯度下降 隨機梯度下降的收

機器學習筆記03Normal equation與梯度下降的比較

在《機器學習筆記02》中已經講了多變數的梯度下降法,以及其他的一些小技巧和注意事項。下面來講一種更加數學化的方法,我們稱之為Normal equation,網上也沒找到什麼標準的翻譯,就暫且稱其為矩陣方程法吧。 一、簡單回顧梯度下降 如下圖所示,我們

Linux學習筆記()系統執行級與執行級的切換

查看 用戶操作 回車 water hat ntsysv tde 文件表 config 1.Linux系統與其它的操作系統不同,它設有執行級別。該執行級指定操作系統所處的狀態。Linux系統在不論什麽時候都執行於某個執行級上,且在不同的執行級上執行的程序和服務都不同,所要

MYSQL學習筆記日期和時間函數

div content minute name top fonts table hmm 指定 MYSQL學習筆記三:日期和時間函數 1. 獲取當前日期的函數和獲取當前時間的函數 /*獲取當前日期的函數和獲取當前時間的函數。將日期以‘YYYY-MM-DD‘或者’YYYYM

Odoo10學習筆記模型(結構化的應用數據)、視圖(用戶界面設計)

其他 描述 用戶界面 列表 支持 字段 界面設計 允許 學習 一:模型 1:創建模型 模型屬性:模型類可以使用一些屬性來控制它們的一些行為: _name :創建odoo模型的內部標識符,必含項。 _description :當用戶界面顯示模型時,一個方便用戶的模型記錄標題。

tensorflow學習筆記()實現自編碼器

sea start ear var logs cos soft 編碼 red 黃文堅的tensorflow實戰一書中的第四章,講述了tensorflow實現多層感知機。Hiton早年提出過自編碼器的非監督學習算法,書中的代碼給出了一個隱藏層的神經網絡,本人擴展到了多層,改進

CSS學習筆記自定義單選框,復選框,開關

sla checked 移動 transform 第一個 16px 位移 block back 一點一點學習CCS,這次學習了如何自定義單選框,復選框以及開關。 一、單選框 1、先寫好body裏面的樣式,先寫幾個框 1 <body> 2 <d

Android學習筆記用Intent串聯activity

conda data activity setresult result 意圖 prot 其他 cte 一:Intent Intent可以理解為 意圖。 我們可以通過創建intent實例來定義一個跳轉意圖,意圖包括:要跳轉到哪個頁面、需要傳遞什麽

vue學習筆記()vue-cli腳手架搭建

node log ins 版本 返回 ges 技術分享 安裝webpack webp 一:安裝vue-cli腳手架: 1:為了確保你的node版本在4.*以上,輸入 node -v 查看本機node版本,低於4請更新。 2:輸入: npm install -g vue-c

機器學習筆記(3)多類邏輯回歸

display images 可能 https 都沒有 -s labels 明顯 交叉 仍然是 動手學嘗試學習系列的筆記,原文見:多類邏輯回歸 — 從0開始 。 這篇的主要目的,是從一堆服飾圖片中,通過機器學習識別出每個服飾圖片對應的分類是什麽(比如:一個看起來

機器學習(一)梯度下降算法的實現及過程分析

回歸 vnc 分布 AC HA 向量 med mar size 機器學習(一)梯度下降算法 因為算法最好能應用到實際問題中才會讓讀者感到它的真實的用處,因此首先我來描述一個實際問題(梯度下降算法用以幫助解決該問題):給定一個指定的數據集,比如由若幹某一

機器學習筆記十三Ensemble思想(上)

形象 alt fill data stat cli views LV 元素 從上面幾篇的決策樹開始,就能夠開始進入到集成學習(ensemble learning)了,

MYSQL進階學習筆記MySQL流程控制語句!(視頻序號進階_7-10)

sls @age 分享 流程 null set oop 默認 soft 知識點四:MySQL流程控制語句(7-10) 選擇語句:   (IF ELSE ELSE IF CASE 分支)IFNULL函數 IF語法: 語法規則:

Docker學習筆記Docker鏡像image

nta process space ffffff 筆記 地址 running build mark Docker的C/S模式的運行 一:查看鏡像#docker images REPOSITORY TAG IMAGE ID

ROS學習筆記()自定義話題的程式設計

前言:ros給我們提供了眾多的訊息結構,但是更多時候我們需要根據自己的研發需求定義自己的訊息結構。 一、檢視ros自帶的訊息結構 我們最常用的一個訊息結構就是std_msgs,那麼怎麼檢視這個訊息結構支援可以定義哪些資料型別呢? 我們使用roscd std_msgs/這個命令開啟該訊息結

Linux學習筆記Linux常用命令

1.目錄處理命令ls ls -a顯示所有檔案,包括隱藏檔案     -l詳細資訊顯示 -lh以人性化方式顯示             列出來的資料的顯示形式:許可權 別調用次數 檔案所

分散式學習筆記分散式系統session一致性的問題

session的概念 什麼是session? 伺服器為每個使用者建立一個會話,儲存使用者的相關資訊,以便多次請求能夠定位到同一個上下文。這樣,當用戶在應用程式的 Web 頁之間跳轉時,儲存在 Session 物件中的變數將不會丟失,而是在整個使用者會話中一直存在下去。當用戶請求來自應用程式的