第1周 - 課程材料

This week, we introduce the core idea of teaching a computer to learn concepts using data(用數據教電腦學習概念)—without being explicitly programmed(不顯性的編程).算法

Linear regression(線性迴歸) predicts a real-valued output based on an input value. We discuss the application of linear regression to housing price prediction, present the notion of a cost function(代價函數), and introduce the gradient descent method(梯度降低方法) for learning.數據庫

Basic understanding of linear algebra(線性代數) is necessary for the rest of the course, especially as we begin to cover models with multiple variables(多變量回歸問題).編程

課程信息


機器學習是一門研究在非特定編程條件下讓計算機採起行動的學科。最近二十年,機器學習爲咱們帶來了自動駕駛汽車、實用的語音識別、高效的網絡搜索,讓咱們對人類基因的解讀能力大大提升。當今機器學習技術已經很是廣泛,您極可能在毫無察覺狀況下天天使用幾十次。許多研究者還認爲機器學習是人工智能(AI)取得進展的最有效途徑。在本課程中,您將學習最高效的機器學習技術,瞭解如何使用這些技術,並本身動手實踐這些技術。更重要的是,您將不只將學習理論知識,還將學習如何實踐,如何快速使用強大的技術來解決新問題。最後,您將瞭解在硅谷企業如何在機器學習和AI領域進行創新。數組

本課程將普遍介紹機器學習數據挖掘統計模式識別(Pattern Recognition)。相關主題包括:promise

  • (i) 監督式學習(參數和非參數算法、支持向量機、核函數和神經網絡)。
  • (ii) 無監督學習(集羣、降維、推薦系統和深度學習)。
  • (iii) 機器學習實例(偏見/方差理論;機器學習和AI領域的創新)。

課程將引用不少案例和應用,您還須要學習如何在不一樣領域應用學習算法,例如智能機器人(感知和控制)、文本理解(網絡搜索和垃圾郵件過濾)、計算機視覺、醫學信息學、音頻、數據庫挖掘等領域。網絡

附註:什麼是模式識別? 模式識別-百科app

隨着計算機技術的發展,人類有可能研究複雜的信息處理過程。信息處理過程的一個重要形式是生命體對環境及客體的識別。對人類來講,特別重要的是對光學信息(經過視覺器官來得到)和聲學信息(經過聽覺器官來得到)的識別。機器學習

 

授課大綱


第 1 周
Introduction  簡介
Linear Regression with One Variable  單變量線性迴歸
Linear Algebra Review  線性代數複習 編程語言

第 2 周
Linear Regression with Multiple Variables  多變量線性迴歸
Octave/Matlab Tutorial ide

第 3 周
Logistic Regression  邏輯迴歸
Regularization 正則化

第 4 周
Neural Networks: Representation 神經網絡表示

第 5 周
Neural Networks: Learning 神經網絡學習

第 6 周
Advice for Applying Machine Learning
Machine Learning System Design 機器學習系統設計

第 7 周
Support Vector Machines 支持向量機

第 8 周
Unsupervised Learning 無監督學習
Dimensionality Reduction 降維

第 9 周
Anomaly Detection 異常檢測
Recommender Systems 推薦系統

第 10 周
Large Scale Machine Learning 大規模機器學習

第 11 周
Application Example: Photo OCR 應用實例

 

Introduction


Welcome

歡迎來到這門關於機器學習的免費網絡課程

機器學習是近年來最激動人心的技術之一 在這門課中 你不只能夠了解機器學習的原理 更有機會進行實踐操做 而且親自運用所學的算法

在生活中 天天你均可能在不知不覺中使用了各類各樣的機器學習算法 好比 當你每一次使用像諸如谷歌 (Google)或必應 (Bing) 的搜索引擎時 它們運做得如此之好的緣由之一即是 由Google或微軟實現的一種學習算法能夠「學會」如何對網頁進行排名 每當你使用臉書 (Facebook)或蘋果 (Apple) 的照片處理應用時 它們都能自動識別出你朋友的照片 這也是機器學習的一種 每當你閱讀電子郵件時 你的垃圾郵件過濾器幫你免受大量垃圾郵件的困擾 這也是經過一種學習算法實現的

還有一個讓我興奮的理由 是一個關於人工智能的夢想 有朝一日 咱們能創造出像你我同樣聰明的機器 儘管咱們離這個目標仍有很長的距離 但許多的人工智能專家相信 實現這一目標最好的途徑是經過學習算法模擬人類大腦的學習方式 關於這點 我也會在這門課程中有所說起

在這門課中你將會掌握機器學習的前沿原理 可是 僅僅瞭解其中的算法和數學是不夠的 尤爲是若是你並不知道如何將所學的理論知識用到你的實際問題上時 所以 咱們也將花費大量時間來讓你們進行編程練習 幫助你實現所學的算法 並體驗到它們到底是怎麼運做的

話說 爲何機器學習在當今如此流行呢?

  • 機器學習發源於人工智能領域 咱們但願可以創造出具備智慧的機器 咱們經過編程來讓機器完成一些基礎的工做 好比如何找到從A到B的最短路徑
  • 但在大多數狀況下 咱們並不知道如何顯式地編寫人工智能程序 來作一些更有趣的任務 好比網頁搜索 標記照片和攔截垃圾郵件等 人們意識到惟一可以達成這些目標的方法 就是讓機器本身學會如何去作 於是 機器學習已經發展成爲計算機的一項新能力 而且與工業界和基礎科學界有着緊密的聯繫

身處機器學習領域 我經常會在短短一週中與形形色色的人打交道 如直升機飛行員、生物學家、還有許多計算機系統專家 好比我在斯坦福的同事們 同時平均每週我還會數次收到來自硅谷的業界人士的email 諮詢我是否有興趣將機器學習算法應用到他們所遇到的實際問題中 以上的例子都彰顯了機器學習所能處理的問題範圍之廣

在硅谷 機器學習引導着大量的課題 如自主機器人、計算生物學等 機器學習的實例還有不少

1.好比數據庫挖掘 機器學習變得如此流行的緣由之一 即是網絡和自動化算法的爆炸性增加 這意味着咱們掌握了比以往多得多的數據集 舉例來講

  • 當今有數不勝數的硅谷企業 在收集有關網絡點擊的數據 (Clickstream Data) 並試圖在這些數據上運用機器學習的算法來更好的理解和服務用戶 這在硅谷已經成爲了一項巨大的產業
  • 隨着電子自動化的發展 咱們如今擁有了電子醫療記錄 若是咱們可以將這些記錄轉變爲醫學知識 那咱們就能對各類疾病了解的更深刻
  • 同時 計算生物學也在電子自動化的輔助下快速發展 生物學家收集了大量有關基因序列以及DNA序列的數據 經過對其應用機器學習的算法來幫助咱們跟深刻地理解人類基因組 及其對咱們人類的意義
  • 幾乎工程界的全部領域 都在使用機器學習算法來分析日益增加的海量數據集

2.有些機器應用咱們並不可以經過手工編程來實現

  • 好比說 我我的對自動直升機有着許多年的研究 想要寫出一個能讓直升機自主飛行的程序幾乎是不可能的任務 惟一可行的解決方案就是讓一臺計算機可以自主地學會如何讓直升機飛行
  • 再好比手寫識別 現在將大量的郵件 按地址分類寄送到全美甚至全球的代價大大下降 其中重要的理由之一即是每當你寫下這樣一封信時 一個機器學習的算法 已經學會如何讀懂你的筆跡並自動地 將你的信件發往它的目的地 因此郵寄跨越上萬裏的信件的費用也很低
  • 你也許曾經接觸過天然語言處理計算機視覺 事實上 這些領域都是試圖經過人工智能來 理解人類的語言和圖像 現在大多數的天然語言處理和計算機視覺都是對機器學習的一種應用

3.機器學習算法也在用戶自定製化程序(self-customizing program)中有着普遍的應用

每當你使用亞馬遜 Netflix或iTunes Genius的服務時 都會收到它們爲你量身推薦的電影或產品 這就是經過學習算法來實現的 能夠相信 這些應用都有着上千萬的用戶 而針對這些海量的用戶 編寫千萬個不一樣的程序顯然是不可能的 惟一有效的解決方案就是開發出可以自我學習 定製出符合你喜愛的並據此進行推薦的軟件

4.最後 機器學習算法已經被應用於探究 人類的學習方式 並試圖理解人類的大腦 咱們也將會了解到研究者是如何運用機器學習的工具 來一步步實現人工智能的夢想

就在幾個月前個人一位學生給我看了一篇文章 文中列舉了當今12個最主要的IT技能 這些技術可讓信息技術行業的招聘官沒法拒絕你 雖然這是一篇略顯老舊的文章 但全部技能中最重要的即是機器學習 在斯坦福 向我諮詢有沒有即將畢業的研究機器學習學生的僱主 遠遠多於咱們這兒每一年畢業的機器學習的學生 於是我以爲對機器學習這一技能的需求仍有着巨大的缺口 而如今正是學習它的絕佳機會 我但願大家能在這門課中收穫良多

在接下來的視頻中 我將更正式地定義什麼是機器學習 也會討論機器學習主要面對的幾類問題相關算法 你也會學習一些主要的機器學習術語 並對不一樣的算法和其適用的場景 有初步的瞭解

Supervised Learning(監督式學習)


在本視頻中,我將介紹一種也許是最多見的機器學習問題。 即監督學習。後面將給出監督學習更正式的定義, 如今最好以示例來講明什麼是監督學習。 以後再給出正式的定義。

迴歸問題

假設你想預測房價(無比須要啊!), 以前,某學生已經從某地收集了數據集(不是中國的,囧) 其中一個數據集是這樣的。 這是橫座標,即不一樣房子的面積,單位平方腳(^-^) 縱軸上是房價,單位 千美圓。 根據給定數據,假設你朋友有棟房子,750平尺(70平米) 想知道這房子能賣多少,好賣掉。

那麼,學習算法怎麼幫你呢?學習算法能夠: 繪出一條直線,讓直線儘量匹配到全部數據。 基於此,看上去,那個房子應該、可能、也許、大概 賣到15萬美圓(一平米兩千刀!)。但這不是惟一的學習算法。 可能還有更好的。好比不用直線了, 可能平方函數會更好, 即二次多項式更符合數據集。若是你這樣作, 預測結果就應該是20萬刀(一平三千刀,漲價好快)。 後面咱們會介紹到如何選擇 是選擇直線仍是平方函數來擬合。 沒有明確的選擇,就不知哪一個能給你的朋友 更好的賣房建議。只是這些每一個都是很好的學習算法例子。 也是監督學習的例子。

術語:監督學習,意指給出一個算法, 須要部分數據集已經有正確答案。好比給定房價數據集, 對於裏面每一個數據,算法都知道對應的正確房價, 即這房子實際賣出的價格。算法的結果就是 算出更多的正確價格,好比那個新房子, 你朋友想賣的那個。

用更術語的方式來定義, 監督學習又叫迴歸問題,(應該是迴歸屬於監督中的一種) 意指要預測一個連續值的輸出,好比房價。 雖然從技術上,通常把房價記到美分單位。 因此實際仍是個離散值,但一般把它看做實際數字, 是一個標量值,一個連續值的數,而術語迴歸, 意味着要預測這類連續值屬性的種類。

分類問題

另外一個監督學習的例子,我和一些朋友 以前研究的領域。讓咱們來看醫學記錄, 並預測胸部腫瘤是惡性良性。 若是某人發現有胸部腫瘤,惡性腫瘤有害又危險, 良性腫瘤則是少害。 顯然人們很關注這個。讓咱們看一個收集好的數據集, 假設在數據集中,橫軸表示腫瘤的大小, 縱軸我打算圈上0或1,是或否, 即腫瘤是惡性的仍是良性的。

因此如圖所示,能夠看到這個大小的腫瘤塊 是良性的,還有這些大小的都是良性的。 不幸地是也看到一些惡性腫瘤,好比這些大小的腫瘤。 因此,有5個良性塊,在這一塊, 還有5個惡性的,它們縱軸值爲1. 如今假設某人杯具地得胸部腫瘤了, 大小大概是這麼大。 對應的機器學習問題就是,你可否估算出一個機率, 即腫瘤爲惡或爲良的機率?

專業地說,這是個分類問題。 分類是要預測一個離散值輸出。 這裏是0或1,惡性或良性。事實證實, 在分類問題中,有時會有超過兩個的值, 輸出的值可能超過兩種。舉個具體例子, 胸部腫瘤可能有三種類型,因此要預測離散值0,1,2,3 0就是良性腫瘤,沒有癌症。 1 表示1號癌症,假設總共有三種癌症。 2 是2號癌症,3 就是3號癌症。 這一樣是個分類問題,由於它的輸出的離散值集合 分別對應於無癌,1號,2號,3號癌症

我再露一小手,在分類問題中,還有另外一種做圖方式 來描述數據。我畫你猜。要用到些許不一樣的符號集合 來描繪數據。若是腫瘤大小做爲惟一屬性, 被用於預測惡性良性,能夠把數據做圖成這樣。 使用不一樣的符號來表示良性和 惡性,即陰性和陽性。因此,再也不統一畫叉叉了, 改用圈圈來表明良性腫瘤,就像這樣。 仍沿用X(叉叉)表明惡性腫瘤。但願你能明白。 我所作的就是,把在上面的數據, 映射下來。再用不一樣的符號, 圈和叉來分別表明良性和惡性。

在上例中,只使用了一個特徵屬性,即腫瘤塊大小, 來預測腫瘤是惡性良性。在其它機器學習問題裏, 有着不僅一個的特徵和屬性。

例子,如今不僅是知道腫瘤大小, 病人年齡和腫瘤大小都知道了。這種狀況下, 數據集如表圖所示,有些病人,年齡、腫瘤已知, 不一樣的病人,會有一點不同, 腫瘤惡性,則用叉來表明。因此,假設 有一朋友得了腫瘤。腫瘤大小和年齡 落在此處。那麼依據這個給定的數據集,學習算法 所作的就是畫一條直線,分開 惡性腫瘤和良性腫瘤,因此學習算法會 畫條直線,像這樣,把兩類腫瘤分開。 而後你就能判斷你朋友的腫瘤是...了 若是它在那邊,學習算法就說 你朋友的腫瘤在良性一邊,所以更可能 是良性的。好,本例中,總共有兩個特徵, 即病人年齡和腫瘤大小。在別的ML問題中, 常常會用到更多特徵,我朋友研究這個問題時, 一般使用這些特徵:好比塊的厚度,即胸部腫瘤的厚度 腫瘤細胞大小和形狀的一致性, 等等。

它代表, 最有趣的學習算法(本課中將學到) 可以處理,無窮多個特徵。不是3到5個這麼少。 在這張幻燈片中,我已經列舉了總共5個不一樣的特徵。 但對於一些學習問題, 真要用到的不僅是三五個特徵, 要用到無數多個特徵,很是多的屬性, 因此,你的學習算法要使用不少的屬性 或特徵、線索來進行預測。那麼,你如何處理 無限多特徵呢?甚至你如何存儲無數的東西 進電腦裏,又要避免內存不足?

事實上,等咱們介紹一種叫支持向量機的算法時, 就知道存在一個簡潔的數學方法,能讓電腦處理無限多的特徵。 想像下,我不是這邊寫兩個特徵, 右邊寫三個特徵。而是,寫一個無限長的特徵表, 不停地寫特徵,彷佛是個無限長的特徵的表。 可是,咱們也有能力設計一個算法來處理這個問題。

因此再從頭複述一遍。本課中,咱們介紹監督學習。 其基本思想是,監督學習中,對於數據集中的每一個數據, 都有相應的正確答案,(訓練集) 算法就是基於這些來作出預測。(就我理解,就是須要先輸入正確的數據進行練習(模型擬合),而後輸入新的數據進行預測。)

就像那個房價, 或腫瘤的性質。後面介紹了迴歸問題。 即經過迴歸來預測一個連續值輸出。 咱們還談到了分類問題, 目標是預測離散值輸出

下面是個小測驗題目: 假設你有家公司,但願研究相應的學習算法去 解決兩個問題。第一個問題,你有一堆貨物的清單。 假設一些貨物有幾千件可賣, 你想預測出,你能在將來三個月賣出多少貨物。 第二個問題,你有不少用戶, 你打算寫程序來檢查每一個用戶的賬目。 對每一個用戶的賬目, 判斷這個賬目是否被黑過(hacked or compromised)。 請問,這兩個問題是分類問題,仍是迴歸問題? 當視頻暫停時,請用你的鼠標進行選擇, 四選一,選擇你認爲正確的答案。 好,但願你剛纔答對了。問題一是個迴歸問題 由於若是我有幾千件貨物, 可能只好把它看成一個實際的值,一個連續的值。 也把賣出的數量看成連續值。 第二個問題,則是分類問題,由於能夠把 我想預測的一個值設爲0,來表示帳目沒有被hacked 另外一個設爲1,表示已經被hacked。 就像乳癌例子中,0表示良性,1表示惡性。 因此這個值爲0或1,取決因而否被hacked, 有算法能預測出是這兩個離散值中的哪一個。 由於只有少許的離散值,因此這個就是個分類問題。

這就是監督學習,下個視頻將會介紹 無監督學習,學習算法的另外一主要類型。

Unsupervised Learning(無監督學習)


在這段視頻中 咱們要講 第二種主要的機器學習問題 叫作無監督學習 在上一節視頻中 咱們已經講過了監督學習

回想起上次的數據集 每一個樣本 都已經被標明正樣本或者負樣本 即良性或惡性腫瘤 所以 對於監督學習中的每個樣本 咱們已經被清楚地告知了 什麼是所謂的正確答案(數據已經被標記 即它們是良性仍是惡性

無監督學習中 咱們用的數據會和監督學習裏的看起來有些不同 在無監督學習中 沒有屬性或標籤這一律念 也就是說全部的數據 都是同樣的 沒有區別 因此在無監督學習中 咱們只有一個數據集 沒人告訴咱們該怎麼作 咱們也不知道 每一個數據點到底是什麼意思 相反 它只告訴咱們 如今有一個數據集 你能在其中找到某種結構嗎?

聚類問題

對於給定的數據集 無監督學習算法可能斷定 該數據集包含兩個不一樣的聚類 你看 這是第一個聚類 而後這是另外一個聚類 你猜對了 無監督學習算法 會把這些數據分紅兩個不一樣的聚類 因此這就是所謂的聚類算法

實際上它被用在許多地方 咱們來舉一個聚類算法的栗子

Google 新聞的例子 若是你還沒見過這個頁面的話 你能夠到這個URL news.google.com 去看看 谷歌新聞天天都在幹什麼呢? 他們天天會去收集 成千上萬的 網絡上的新聞 而後將他們分組 組成一個個新聞專題 好比 讓咱們來看看這裏 這裏的URL連接 鏈接着不一樣的 有關BP油井事故的報道 因此 讓咱們點擊 這些URL中的一個 恩 讓咱們點一個 而後咱們會來到這樣一個網頁 這是一篇來自華爾街日報的 有關……你懂的 有關BP油井泄漏事故的報道 標題爲《BP殺死了Macondo》 Macondo 是個地名 就是那個漏油事故的地方 若是你從這個組裏點擊一個不一樣的URL 那麼你可能會獲得不一樣的新聞 這裏是一則CNN的新聞 是一個有關BP石油泄漏的視頻 若是你再點擊第三個連接 又會出現不一樣的新聞 這邊是英國衛報的報道 也是關於BP石油泄漏 因此 谷歌新聞所作的就是 去搜索成千上萬條新聞 而後自動的將他們聚合在一塊兒 所以 有關同一主題的 新聞被顯示在一塊兒

實際上 聚類算法無監督學習算法 也能夠被用於許多其餘的問題 這裏咱們舉個它在基因組學中的應用 下面是一個關於基因芯片的例子 基本的思想是 給定一組不一樣的個體 對於每一個個體 檢測它們是否擁有某個特定的基因 也就是說,你要去分析有多少基因顯現出來了 所以 這些顏色 紅 綠 灰 等等 它們 展現了這些不一樣的個體 是否擁有一個特定基因 的不一樣程度 而後你能作的就是 運行一個聚類算法 把不一樣的個體納入不一樣的類 或歸爲不一樣類型的人 這就是無監督學習 咱們沒有提早告知這個算法 這些是第一類的人 這些是第二類的人 這些是第三類的人等等 相反咱們只是告訴算法 你看 這兒有一堆數據 我不知道這個數據是什麼東東 我不知道里面都有些什麼類型 叫什麼名字 我甚至不知道都有哪些類型 可是 請問你能夠自動的找到這些數據中的類型嗎? 而後自動的 按獲得的類型把這些個體分類 雖然事先我並不知道哪些類型 由於對於這些數據樣原本說 咱們沒有給算法一個 正確答案 因此 這就是無監督學習

無監督學習或聚類算法在其餘領域也有着大量的應用

  • 它被用來組織大型的計算機集羣 我有一些朋友在管理 大型數據中心 也就是 大型計算機集羣 並試圖 找出哪些機器趨向於 協同工做 若是你把這些機器放在一塊兒 你就可讓你的數據中心更高效地工做
  • 第二種應用是用於社交網絡的分析 因此 若是能夠得知 哪些朋友你用email聯繫的最多 或者知道你的Facebook好友 或者你Google+裏的朋友 知道了這些以後 咱們是否能夠自動識別 哪些是很要好的朋友組 哪些僅僅是互相認識的朋友組
  • 還有在市場分割中的應用 許多公司擁有龐大的客戶信息數據庫 那麼 給你一個 客戶數據集 你可否 自動找出不一樣的市場分割 並自動將你的客戶分到不一樣的 細分市場中 從而有助於我在 不一樣的細分市場中 進行更有效的銷售 這也是無監督學習 咱們如今有 這些客戶數據 但咱們預先並不知道 有哪些細分市場 並且 對於咱們數據集的某個客戶 咱們也不能預先知道 誰屬於細分市場一 誰又屬於細分市場二等等 但咱們必須讓這個算法本身去從數據中發現這一切
  • 最後 事實上無監督學習也被用於 天文數據分析 經過這些聚類算法 咱們發現了許多 驚人的、有趣的 以及實用的 關於星系是如何誕生的理論 全部這些都是聚類算法的例子 而聚類只是無監督學習的一種

雞尾酒宴問題

如今讓我來告訴你另外一種 我先來介紹一下雞尾酒宴問題 恩 我想你參加過雞尾酒會的 是吧?  嗯 想象一下 有一個宴會 有一屋子的人 你們都坐在一塊兒 並且在同時說話 有許多聲音混雜在一塊兒 由於每一個人都是在同一時間說話的 在這種狀況下你很難聽清楚你面前的人說的話 所以 好比有這樣一個場景 宴會上只有兩我的 兩我的 同時說話 恩 這是個很小的雞尾酒宴會

咱們準備好了兩個麥克風 把它們放在房間裏 而後 由於這兩個麥克風距離這兩我的 的距離是不一樣的 每一個麥克風都記錄下了 來自兩我的的聲音的不一樣組合 也許A的聲音 在第一個麥克風裏的聲音會響一點 也許B的聲音 在第二個麥克風裏會比較響一些 由於2個麥克風 的位置相對於 2個說話者的位置是不一樣的 但每一個麥克風都會錄到 來自兩個說話者的重疊部分的聲音 這裏有一個 來自一個研究員錄下的兩個說話者的聲音 讓我先放給你聽第一個 這是第一個麥克風錄到的錄音: 一 (UNO) 二 (DOS) 三 (TRES) 四 (CUATRO) 五 (CINCO) 六 (SEIS) 七 (SIETE) 八 (ocho) 九 (NUEVE) 十 (Y DIEZ) 好吧 這大概不是什麼有趣的酒會…… ……在這個酒會上 有兩我的 各自從1數到10 但用的是兩種不一樣語言 你剛纔聽到的是 第一個麥克風的錄音 這裏是第二個的: 一 (UNO) 二 (DOS) 三 (TRES) 四 (CUATRO) 五 (CINCO) 六 (SEIS) 七 (SIETE) 八 (ocho) 九 (NUEVE) 十 (Y DIEZ)

因此 咱們能作的就是把 這兩個錄音輸入 一種無監督學習算法中 稱爲「雞尾酒會算法」 讓這個算法 幫你找出其中蘊含的分類 而後這個算法 就會去聽這些 錄音 而且你知道 這聽起​​來像 兩個音頻錄音 被疊加在一塊兒 因此咱們才能聽到這樣的效果 此外 這個算法 還會分離出 這兩個被 疊加到一塊兒的 音頻源 事實上 這是咱們的雞尾酒會算法的第一個輸出 一 二 三 四 五 六 七 八 九 十 因此我在一個錄音中 分離出了英文聲音 這是第二個輸出 Uno dos tres quatro cinco seis siete ocho nueve y diez 聽起來不錯嘛 再舉一個例子 這是另外一個錄音 也是在一個相似的場景下 這是第一個麥克風的錄音: 一 二 三 四 五 六 七 八 九 十 OK 這個可憐的傢伙從 雞尾酒會回家了 他如今獨自一人坐在屋裏 對着錄音機自言自語 這是第二個麥克風的錄音 一 二 三 四 五 六 七 八 九 十 當你把這兩個麥克風錄音 送給與剛剛相同的算法處理 它所作的仍是 告訴你 這聽起來有 兩種音頻源 而且 算法說 這裏是我找到的第一個音頻源 一 二 三 四 五 六 七 八 九 十 恩 不是太完美 提取到了人聲 但還有一點音樂沒有剔除掉 這是算法的第二個輸出 還好 在第二個輸出中 它設法剔除掉了整我的聲 只是清理了下音樂 剔除了從一到十的計數

因此 你能夠看到 像這樣的無監督學習算法 也許你想問 要實現這樣的算法 很複雜吧? 看起來 爲了 構建這個應用程序 作這個音頻處理 彷佛須要寫好多代碼啊 或者須要連接到 一堆處理音頻的Java庫 貌似須要一個 很是複雜的程序 分離出音頻等

實際上 要實現你剛剛聽到的效果 只須要一行代碼就能夠了 寫在這裏呢 固然 研究人員 花了很長時間纔想出這行代碼的 ^-^ 我不是說這是一個簡單的問題

但事實上 若是你 使用正確的編程環境 許多學習 算法是用很短的代碼寫出來的 因此這也是爲何在 這門課中咱們要 使用Octave的編程環境 Octave是一個免費的 開放源碼的軟件 使用Octave或Matlab這類的工具 許多學習算法 均可以用幾行代碼就能夠實現 在後續課程中 我會教你如何使用Octave 你會學到 如何在Octave中實現這些算法 或者 若是你有Matlab 你能夠用它 事實上 在硅谷 不少的機器學習算法 咱們都是先用Octave 寫一個程序原型 由於在Octave中實現這些 學習算法的速度快得讓你沒法想象 在這裏 每個函數 例如 SVD 意思是奇異值分解 但這實際上是解線性方程 的一個慣例 它被內置在Octave軟件中了 若是你試圖 在C + +或Java中作這個 將須要寫N多代碼 而且還要鏈接複雜的C + +或Java庫 因此 你能夠在C++或 Java或Python中 實現這個算法 只是會 更加複雜而已

在教授機器學習 將近10年後 我得出的一個經驗就是 若是你使用Octave的話 會學的更快 而且若是你用 Octave做爲你的學習工具 和開發原型的工具 你的學習和開發過程 會變得更快 而事實上在硅谷 不少人會這樣作 他們會先用Octave 來實現這樣一個學習算法原型 只有在肯定 這個算法能夠工做後 纔開始遷移到 C++ Java或其它編譯環境 事實證實 這樣作 實現的算法 比你一開始就用C++ 實現的算法要快多了 因此 我知道 做爲一個老師 我不能總是念叨: 「在這個問題上相信我「 但對於 那些歷來沒有用過這種 相似Octave的編程環境的童鞋 我仍是要請你 相信我這一次 我認爲 你的時間 研發時間 是你最寶貴的資源之一 當見過不少的人這樣作之後 我以爲若是你也這樣作 做爲一個機器學習的 研究者和開發者 你會更有效率 若是你學會先用Octave開發原型 而不是先用其餘的編程語言來開發

最後總結一下 咱們談到了無監督學習 它是一種學習機制 你給算法大量的數據 要求它找出數據中蘊含的類型結構

如下的四個例子中 哪個 您認爲是 無監督學習算法 而不是監督學習問題 對於每個選項 在左邊的複選框 選中你認爲 屬於無監督學習的 選項 而後按一下右下角的按鈕 提交你的答案 因此 當視頻暫停時 請回答幻燈片上的這個問題           恩 沒忘記垃圾郵件文件夾問題吧? 若是你已經標記過數據 那麼就有垃圾郵件和 非垃圾郵件的區別 咱們會將此視爲一個監督學習問題 新聞故事的例子 正是咱們在本課中講到的 谷歌新聞的例子 咱們介紹了你能夠如何使用 聚類算法這些文章聚合在一塊兒 因此這是無監督學習問題 市場細分的例子 我以前有說過 這也是一個無監督學習問題 由於我是要 拿到數據 而後要求 它自動發現細分市場 最後一個例子 糖尿病 這實際上就像咱們 上節課講到的乳腺癌的例子 只不過這裏不是 好的或壞的癌細胞 良性或惡性腫瘤咱們 如今是有糖尿病或 沒有糖尿病 因此這是 有監督的學習問題 像處理那個乳腺癌的問題同樣 咱們會把它做爲一個 有監督的學習問題來處理

好了 關於無監督學習問題 就講這麼多了 下一節課中咱們 會涉及到更具體的學習算法 並開始討論 這些算法是如何工做的 以及咱們如何來實現它們

 

Linear Regression with One Variable單變量線性迴歸


Model and Cost Function模型和代價函數

Model Representation模型表示

  • 監督學習中迴歸和分類的區別
  • 一些基本的符號
  • 模型是什麼?假設函數是什麼?線性迴歸的假設函數怎麼寫?

咱們的第一個學習算法是線性迴歸算法 在這段視頻中 你會看到這個算法的概況 更重要的是你將會了解 監督學習過程完整的流程

讓咱們經過一個例子來開始 這個例子是預測住房價格的 咱們要使用一個數據集 數據集包含俄勒岡州波特蘭市的住房價格 在這裏 我要根據不一樣房屋尺寸所售出的價格 畫出個人數據集 比方說 咱們來看這個數據集 你有一個朋友正想出售本身的房子 若是你朋友的房子是1250平方尺大小 你要告訴他們 這房子能賣多少錢 那麼 你能夠作的一件事就是 構建一個模型 也許是條直線 從這個數據模型上來看 也許你能夠告訴你的朋友 他能以大約220000(美圓)左右的價格 賣掉這個房子

那麼這就是監督學習算法的一個例子 它被稱做監督學習是由於對於每一個數據來講 咱們給出了 「正確的答案」 即告訴咱們 根據咱們的數據來講 房子實際的價格是多少

並且 更具體來講 這是一個迴歸問題 迴歸一詞指的是咱們根據以前的數據預測出一個準確的輸出值 對於這個例子就是價格

同時 還有另外一種最多見的監督學習方式 叫作分類問題 當咱們想要預測離散的輸出值 例如 若是咱們正在尋找 癌症腫瘤並想要肯定 腫瘤是良性的仍是惡性的 這就是0/1離散輸出的問題

更進一步來講 在監督學習中咱們有一個數據集 這個數據集被稱訓練集 所以對於房價的例子 咱們有一個訓練集 包含不一樣的房屋價格 咱們的任務就是從這個數據中學習預測房屋價格

如今咱們給出這門課中常用的一些符號定義 咱們要定義頗多符號 不過不要緊 如今你記不住全部的符號也不要緊 隨着課程的進展 你會發現記住這些符號會頗有用

(請牢記如下 公式 和 符號,否則後面的課程徹底不知所云)

我將在整個課程中用小寫的m 來表示訓練樣本的數目 所以 在這個數據集中 若是表中有47行 那麼咱們就有47組訓練樣本 m就等於47

  • 讓我用小寫字母x來表示輸入變量 每每也被稱爲特徵量 這就是用x表示輸入的特徵
  • 而且咱們將用y來表示輸出變量或者目標變量 也就是個人預測結果 那麼這就是第二列
  • 在這裏 我要使用(x, y)來表示一個訓練樣本 因此 在這個表格中的單獨的一行對應於一個訓​​練樣本
  • 爲了表示某個訓練樣本 我將使用x上標(i)與y上標(i)來表示  而且用這個表示第i個訓練樣本 因此這個上標 i 看這裏 這不是求冪運算 這個(x(i), y(i)) 括號裏的上標i 只是一個索引 表示個人訓練集裏的第i行 這裏不是x的i和y的i次方 僅僅是指(x(i), y(i))是在此表中的第 i 行
m #訓練集樣本的數目
x #輸入變量的特徵值
y #輸出變量或目標變量
(x, y) #一個訓練樣本

舉個例子 x(1) 指的是 第一個訓練集裏值爲2104的輸入值 這個就是第一行裏的x x(2) 等於1416吧? 這是第二個x y(1) 等於460 這是我第一個訓練集樣本的y值 這就是(1)所表明的含義 像以前同樣 我會問你一個問題 須要幾秒的時間 檢查一下你的理解程度 在這個視頻片斷中 有時會有視頻選擇題彈出 當它彈出的時候 請使用鼠標來選擇你認爲正確的答案

這就是一個監督學習算法的工做方式

咱們能夠看到這裏有咱們的訓練集裏房屋價格 咱們把它餵給咱們的學習算法 這就是學習算法的工做了 而後輸出一個函數 按照慣例 一般表示爲小寫h h表明hypothesis(假設), h表示一個函數 輸入是房屋尺寸大小 就像你朋友想出售的房屋 所以 h 根據輸入的 x 值來得出 y 值 y值對應房子的價格

所以 h是一個從x到y的函數映射 人們常常問我爲何這個函數被稱做假設(hypothesis) 大家中有些人可能知道hypothesis的意思 從字典或者其它什麼方式能夠查到 其實在機器學習中 這是一個在早期被用於機器學習的名稱 它有點繞口 對這類函數來講 這可能不是一個很恰當的名字 對錶示從房屋的大小到價格的函數映射 我認爲這個詞"hypothesis" 可能不是最好的名稱 可是這是人們在機器學習中使用的標準術語 因此不用太糾結人們爲何這麼叫它

設計學習算法的時候 咱們接下來須要去思考的是 怎樣獲得這個假設h 對於這一點在接下來的幾個視頻中 我將選擇最初的使用規則 h表明hypothesis 咱們將會這麼寫 hθ(x)=θ0+θ1*x 爲了方便 有時非書面形式也能夠這麼寫 hθ(x) 我就寫成h(x) 這是縮寫方式 但通常來講我會保留這個下標θ 從這個圖片中 全部這一切意味着咱們要預測一個關於x的 線性函數 y 對吧? 因此這就是數據集和函數的做用 用來預測 這裏是y關於x的線性函數 hθ(x)=θ0+θ1*x 那麼爲何是一個線性函數呢? 有時候 咱們會有更復雜的函數 也許是非線性函數 可是 因爲線性方程是簡單的形式 咱們將先從線性方程的例子入手

hθ(x)=θ0+θ1*x

固然 最終咱們將會創建更復雜的模型 以及更復雜的學習算法 (講出了機器學習的核心思路)

好吧 讓咱們也給這模型 起一個名字 這個模型被稱爲線性迴歸(linear regression)模型 另外 這其實是關於單個變量的線性迴歸 這個變量就是x 根據x來預測全部的價格函數 同時 對於這種模型有另一個名稱 稱做單變量線性迴歸 單變量是對一個變量的一種 特別的表述方式

總而言之 這就是線性迴歸 在接下來的視頻中 咱們將開始討論如何去實現這種模型

 

Cost Function代價函數


  • 模型參數是什麼?
  • 如何引出的代價函數J(θ0,θ1)?獲得最優的模型參數
  • 什麼是代價函數?代價函數做用?(策略,即如何選擇假設空間中的函數)

在這段視頻中咱們將定義代價函數的概念 這有助於咱們 弄清楚如何把最有可能的直線與咱們的數據擬合(如何選出惟一模型

在線性迴歸中咱們有一個像這樣的訓練集 記住 M表明了訓練樣本的數量 因此 好比 M = 47 而咱們的假設函數 也就是用來進行預測的函數 是這樣的線性函數形式

接下來咱們會引入一些術語 這些θ0和θ1 這些θi我把它們稱爲模型參數 在這個視頻中 咱們要作的就是談談如何選擇這兩個參數值θ0和θ1  選擇不一樣的參數θ0和θ1 咱們會獲得不一樣的假設 不一樣的假設函數 我知道大家中的有些人可能已經知道我在這張幻燈片上要講的

θi   #模型參數

但咱們仍是用這幾個例子來複習回顧一下 若是θ0是1.5 θ1是0 那麼假設函數會看起來是這樣 是吧 由於你的假設函數是h(x)=1.5+0*x 是這樣一個常數函數 恆等於1.5 若是θ0=0而且θ1=0.5 那麼假設會看起來像這樣 它會經過點(2,1) 這樣你又獲得了h(x) 或者hθ(x) 可是有時咱們爲了簡潔會省略θ 所以 h(x)將等於0.5倍的x 就像這樣 最後 若是θ0=1而且θ1=0.5 咱們最後獲得的假設會看起來像這樣 讓咱們來看看 它應該經過點(2,2) 這是個人新的h(x)或者寫做hθ(x) 對吧? 你還記得以前咱們提到過hθ(x)的 但做爲簡寫 咱們一般只把它寫做h(x) 

在線性迴歸中 咱們有一個訓練集 可能就像我在這裏繪製的 咱們要作的就是 得出θ0 θ1這兩個參數的值 來讓假設函數表示的直線 儘可能地與這些數據點很好的擬合 也許就像這裏的這條線同樣

那麼咱們如何得出θ0 θ1的值 來使它很好地擬合數據的呢?咱們的想法是 咱們要選擇 能使h(x) 也就是 輸入x時咱們預測的值 最接近該樣本對應的y值的參數θ0 θ1 因此 在咱們的訓練集中咱們會獲得必定數量的樣本 咱們知道x表示賣出哪所房子 而且知道這所房子的實際價格 因此 咱們要儘可能選擇參數值 使得 在訓練集中 給出訓練集中的x值 咱們能合理準確地預測y的值

讓咱們給出標準的定義 在線性迴歸中 咱們要解決的是一個最小化問題 因此我要寫出關於θ0 θ1的最小化 並且 我但願這個式子極其小 是吧 我想要h(x)和y之間的差別要小 我要作的事情是儘可能減小假設的輸出與房子真實價格 之間的差的平方 明白嗎?

接下來我會詳細的闡述 別忘了 我用符號( x(i),y(i) )表明第i個樣本 因此我想要作的是對全部訓練樣本進行一個求和 對i=1到i=M的樣本 將對假設進行預測獲得的結果 此時的輸入是第i號房子的面積 對吧 將第i號對應的預測結果 減去第i號房子的實際價格 所得的差的平方相加獲得總和 而我但願儘可能減少這個值 也就是預測值和實際值的差的平方偏差和 或者說預測價格和 實際賣出價格的差的平方 我說了這裏的m指的是訓練集的樣本容量 對吧 這個井號是訓練樣本「個數」的縮寫 對吧 而爲了讓表達式的數學意義 變得容易理解一點 咱們實際上考慮的是 這個數的1/m 所以咱們要嘗試儘可能減小咱們的平均偏差 也就是儘可能減小其1/2m(why?) 一般是這個數的一半 前面的這些只是爲了使數學更直白一點 所以對這個求和值的二分之一求最小值 應該得出相同的θ0值和相同的θ1值來 請你們必定弄清楚這個道理 沒問題吧?在這裏hθ(x)的這種表達 這是咱們的假設 它等於θ0加上θ1與x(i)的乘積 而這個表達 表示關於θ0和θ1的最小化過程 這意味着咱們要找到θ0和θ1 的值來使這個表達式的值最小 這個表達式因θ0和θ1的變化而變化對吧?

所以 簡單地說 咱們正在把這個問題變成 找到能使 個人訓練集中預測值和真實值的差的平方的和 的1/2M最小的θ0和θ1的值

公式

所以 這將是個人線性迴歸的總體目標函數 爲了使它更明確一點 咱們要改寫這個函數 按照慣例 我要定義一個代價函數 正如屏幕中所示 這裏的這個公式 咱們想要作的就是關於θ0和θ1函數J(θ0,θ1)最小值 這就是個人代價函數 代價函數也被稱做平方偏差函數 有時也被稱爲 平方偏差代價函數 事實上 咱們之因此要求出 偏差的平方和 是由於偏差平方代價函數 對於大多數問題 特別是迴歸問題 都是一個合理的選擇

還有其餘的代價函數也能很好地發揮做用 可是平方偏差代價函數多是解決迴歸問題最經常使用的手段

在後續課程中 咱們還會談論其餘的代價函數 但咱們剛剛講的選擇是對於大多數線性迴歸問題很是合理的 好吧 因此這是代價函數 到目前爲止 咱們已經 介紹了代價函數的數學定義 也許這個函數J(θ0,θ1)有點抽象 可能你仍然不知道它的內涵 在接下來的幾個視頻裏 咱們要更進一步解釋 代價函數J的工做原理 並嘗試更直觀地解釋它在計算什麼 以及咱們使用它的目的

Cost Function - Intuition I 直觀感覺I


  • 直觀理解假設函數和代價函數的運做機理(簡化的代價函數)

在上一個視頻中 咱們給了代價函數一個數學上的定義 在這個視頻裏 讓咱們經過一些例子來獲取一些直觀的感覺 看看代價函數究竟是在幹什麼

回顧一下 這是咱們上次所講過的內容 咱們想找一條直線來擬合咱們的數據 因此咱們用 θ0 θ1 等參數 獲得了這個假設 並且經過選擇不一樣的參數 咱們會獲得不一樣的直線擬合 因此擬合出的數據就像這樣 而後咱們還有一個代價函數 這就是咱們的優化目標

在這個視頻裏 爲了更好地 將代價函數可視化 我將使用一個簡化的假設函數 就是右邊這個函數 而後我將會用這個簡化的假設 也就是 θ1*x 咱們能夠將這個函數當作是 把 θ0 設爲0 因此我只有一個參數 也就是 θ1  代價函數看起來與以前的很像 惟一的區別是如今 h(x) 等於 θ1*x 只有一個參數 θ1 因此個人 優化目標將 J(θ1) 最小化 用圖形來表示就是 若是 θ0 等於零 也就意味這咱們選擇的假設函數 會通過原點 也就是通過座標 (0,0) 

直觀的理解假設函數與代價函數的運做機理

經過利用簡化的假設獲得的代價函數 咱們能夠試着更好地理解 代價函數這個概念 咱們要理解的是這兩個重要的函數

  • 第一個是假設函數
  • 第二個是代價函數

隨機選定一個參數,就能夠計算出代價函數值,能夠經過做圖找到最小的代價函數值,此時的參數就是模型的最優參數

(之後會經過梯度降低法來正式肯定模型參數)

注意這個假設函數 h(x) 對於一個固定的 θ1 這是一個關於 x 的函數  因此這個假設函數就是一個關於 x 這個房子大小的函數 與此不一樣的是 代價函數 J 是一個關於參數 θ1 的函數 而 θ1 控制着這條直線的斜率

如今咱們把這寫函數都畫出來 試着更好地理解它們 咱們從假設函數開始 好比說這裏是個人訓練樣本 它包含了三個點 (1,1) (2,2) 和 (3,3) 如今咱們選擇一個值 θ1 因此當 θ1 等於1 若是這是我選擇的 θ1 那麼個人假設函數看起來就會像是這條直線 我將要指出的是 當我描繪出個人假設函數 X軸 個人橫軸被標定爲X軸 X軸是表示房子大小的量 如今暫時把 θ1 定爲1 我想要作的就是 算出在 θ1 等於 1 的時候 J(θ1) 等於多少 因此咱們 按照這個思路來計算代價函數的大小 和以前同樣

代價函數定義以下 是吧 對這個偏差平方項進行求和 這就等於 這樣一個形式 簡化之後就等於 三個0的平方和 固然仍是0 如今 在代價函數裏 咱們發現全部這些值都等於0 由於對於我所選定的這三個訓練樣本 ( 1 ,1 ) (2,2) 和 (3,3)  若是 θ1 等於 1 那麼 h(x(i)) 就會正好等於 y(i) 讓我把這個寫得好一點 對吧 因此 h(x) - y 全部的這些值都會等於零 這也就是爲何 J(1) 等於零 因此 咱們如今知道了 J(1) 是0 讓我把這個畫出來 我將要在屏幕右邊畫出個人代價函數 J 要注意的是 由於個人代價函數是關於參數 θ1 的函數 當我描繪個人代價函數時 X軸就是 θ1 如今我有 J(1) 等於零 讓咱們繼續把函數畫出來 結果咱們會獲得這樣一個點 如今咱們來看其它一些樣本 θ1 能夠被設定爲 某個範圍內各類可能的取值 因此 θ1 能夠取負數  0 或者正數 因此若是 θ1 等於0.5會發生什麼呢 繼續把它畫出來 如今要把 θ1 設爲0.5 在這個條件下 個人假設函數看起來就是這樣 這條線的斜率等於0.5 如今讓咱們計算 J(0.5) 因此這將會等於1除以2m 乘以那一塊 其實咱們不難發現後面的求和 就是這條線段的高度的平方 加上這條線段高度的平方 再加上這條線段高度的平方 三者求和 對嗎? 就是 y(i) 與預測值 h(x(i)) 的差 對嗎 因此第一個樣本將會是0.5減去1的平方 由於個人假設函數預測的值是0.5 而實際值則是1 第二個樣本 我獲得的是1減去2的平方 由於個人假設函數預測的值是1 可是實際房價是2 最後 加上 1.5減去3的平方 那麼這就等於1除以2乘以3 由於訓練樣本有三個點因此 m 等於3 對吧 而後乘以括號裏的內容 簡化後就是3.5 因此這就等於3.5除以6 也就約等於0.68 讓咱們把這個點畫出來 很差意思 有一個計算錯誤 這實際上該是0.58 因此咱們把點畫出來 大約會是在這裏 對嗎 如今 讓咱們再多作一個點 讓咱們試試θ1等於0 J(0) 會等於多少呢 若是θ1等於0 那麼 h(x) 就會等於一條水平的線 對了 就會像這樣是水平的 因此 測出這些偏差 咱們將會獲得 J(0) 等於 1除以 2m 乘以1的平方 加上2的平方 加上3的平方 也就是 1除以6乘以14 也就是2.3左右 因此讓咱們接着把這個點也畫出來 因此這個點最後是2.3 固然咱們能夠接着設定 θ1 等於別的值 進行計算 你也能夠把 θ1 設定成一個負數 因此若是 θ1 是負數 那麼 h(x) 將會等於 打個比方說 -0.5 乘以x 而後 θ1 就是 -0.5 那麼這將會 對應着一個斜率爲-0.5的假設函數 並且你能夠 繼續計算這些偏差 結果你會發現 對於0.5 結果會是很是大的偏差 最後會獲得一個較大的數值 相似於5.25 等等 對於不一樣的 θ1 你能夠計算出這些對應的值 對嗎 結果你會發現 你算出來的這些值 你獲得一條這樣的曲線 經過計算這些值 你能夠慢慢地獲得這條線 這就是 J(θ) 的樣子了

咱們來回顧一下 任何一個 θ1 的取值對應着一個不一樣的 假設函數 或者說對應着左邊一條不一樣的擬合直線 對於任意的θ1 你能夠算出一個不一樣的 J(θ1) 的取值  舉個例子 你知道的 θ1 等於1時對應着穿過這些數據的這條直線  當 θ1 等於0.5 也就是這個玫紅色的點 也許對應着這條線 而後 θ1 等於0 也就是藍色的這個點 對應着 這條水平的線 對吧 因此對於任意一個 θ1 的取值 咱們會獲得 一個不一樣的 J(θ1) 並且咱們能夠利用這些來描出右邊的這條曲線 如今你還記得 學習算法的優化目標 是咱們想找到一個 θ1 的值 來將 J(θ1) 最小化 對嗎 這是咱們線性迴歸的目標函數 嗯  看這條曲線 讓 J(θ1) 最小化的值 是 θ1 等於1  而後你看 這個確實就對應着最佳的經過了數據點的擬合直線 這條直線就是由 θ1=1 的設定而獲得的 而後 對於這個特定的訓練樣本 咱們最後可以完美地擬合 這就是爲何最小化 J(θ1) 對應着尋找一個最佳擬合直線的目標

總結一下 在這個視頻裏 咱們看到了一些圖形 來理解代價函數 要作到這個 咱們簡化了算法 讓這個函數只有一個參數 θ1 也就是說咱們把 θ0 設定爲0

在下一個視頻裏 咱們將回到原來的問題的公式 而後看一些 帶有 θ0 和 θ1 的圖形 也就是說不把 θ0 設置爲0了 但願這會讓你更好地理解在原來的線性迴歸公式裏 代價函數 J 的意義

Cost Function - Intuition II 直觀感覺II


  • 輪廓圖是什麼?

這節課中 咱們將更深刻地學習代價函數的做用 這段視頻的內容假設你已經認識輪廓圖 若是你對輪廓圖不太熟悉的話 這段視頻中的某些內容你可能會聽不懂 但沒關係 若是你跳過這段視頻的話 也沒什麼關係 不聽這節課對後續課程理解影響不大

和以前同樣 這是咱們的幾個重要公式 包括了

  • 假設h
  • 參數θ
  • 代價函數J
  • 優化目標

跟前一節視頻不一樣的是 我仍是把θ寫成θ0、θ1的形式(兩個自變量,一個因變量,圖形必然是三維的) 便於這裏咱們要對代價函數進行的可視化 和上次同樣 首先來理解假設h和代價函數J 這是房價數據組成的訓練集數據

讓咱們來構建某種假設 就像這條線同樣 很顯然這不是一個很好的假設 但無論怎樣 若是我假設θ0等於50 θ1等於0.06的話 那麼我將獲得這樣一個假設函數 對應於這條直線 給出θ0和θ1的值 咱們要在右邊畫出代價函數的圖像 上一次 咱們是只有一個θ1 也就是說 畫出的代價函數是關於θ1的函數 但如今咱們有兩個參數 θ0和θ1 所以圖像就會複雜一些了 當只有一個參數θ1的時候 咱們畫出來是這樣一個弓形函數 而如今咱們有了兩個參數 那麼代價函數 仍然呈現相似的某種弓形 實際上這取決於訓練樣本 你可能會獲得這樣的圖形 所以這是一個三維曲面圖 兩個軸分別表示θ0和θ1 隨着你改變θ0和θ1的大小 你便會獲得不一樣的代價函數 J(θ0,θ1) 對於某個特定的點 (θ0,θ1) 這個曲面的高度 也就是豎直方向的高度 就表示代價函數 J(θ0,θ1) 的值 不難發現這是一個弓形曲面

咱們來看看三維圖 這是這個曲面的三維圖 水平軸是θ0、θ1 豎直方向表示 J(θ0,θ1) 旋轉一下這個圖 你就更能理解這個弓形曲面所表示的代價函數了

在這段視頻的後半部分 爲了描述方便 我將再也不像這樣給你用三維曲面圖的方式解釋代價函數J 而仍是用輪廓圖來表示  contour plotcontour figure 意思同樣 右邊就是一個輪廓圖 兩個軸分別表示 θ0 和 θ1 而這些一圈一圈的橢圓形 每個圈就表示 J(θ0,θ1) 相同的全部點的集合 具體舉例來講 咱們選三個點出來 這三個桃紅色的點 都表示相同的 J(θ0,θ1) 的值 對吧 橫縱座標分別是θ0 θ1 這三個點的 J(θ0,θ1) 值是相同的 若是你以前沒怎麼接觸輪廓圖的話 你就這麼想 你就想象一個弓形的函數從屏幕裏冒出來 所以最小值 也就是這個弓形的最低點就是這個點 對吧 也就是這一系列同心橢圓的中心點 想象一下這個弓形從屏幕裏冒出來

因此這些橢圓形 都從個人屏幕上冒出相同的高度 弓形的最小值點是這個位置 所以輪廓圖是一種很方便的方法 可以直觀地觀察 代價函數J

接下來讓咱們看幾個例子 在這裏有一點 這個點表示θ0等於800 θ1大概等於-0.15 那麼這個紅色的點 表明了某個 (θ0,θ1) 組成的數值組 而這個點也對應於左邊這樣一條線 對吧  θ0等於800 也就是跟縱軸相交於大約800 斜率大概是-0.15 固然 這條線並不能很好地擬合數據 對吧 以這組 θ0 θ1 爲參數的這個假設 h(x) 並非數據的較好擬合 而且你也發現了 這個代價值 就是這裏的這個值 距離最小值點還很遠 也就是說這個代價值仍是算比較大的 所以不能很好擬合數據

讓咱們再來看幾個例子 這是另外一個假設 你不難發現 這依然不是一個好的擬合 但比剛纔稍微好一點 這是個人 θ0 θ1 點 這是 θ0 的值 大約爲360  θ1 的值爲0 咱們把它寫下來  θ0=360 θ1=0 所以這組θ值對應的假設是 這條水平的直線 也就是h(x) = 360 + 0 × x 這就是假設 這個假設一樣也有某個代價值 而這個代價值就對應於這個代價函數在這一點的高度 讓咱們再來看一些例子 這是另外一個例子 這個點這組 θ0 和 θ1 對應這樣一條假設h(x) 一樣地 仍是對數據擬合很差 離最小值更遠了

最後一個例子 這個點其實不是最小值 但已經很是靠近最小值點了 這個點對數據的擬合就很不錯 它對應這樣兩個θ0 和 θ1 的值 同時也對應這樣一個 h(x) 這個點雖然不在最小值點 但很是接近了 所以偏差平方和 或者說 訓練樣本和假設的距離的平方和 這個距離值的平方和 很是接近於最小值 儘管它還不是最小值  好的 經過這些圖形 我但願你能更好地 理解這些代價函數 J 所表達的值 它們是什麼樣的 它們對應的假設是什麼樣的 以及什麼樣的假設對應的點 更接近於代價函數J的最小值

固然 咱們真正須要的是一種有效的算法  可以自動地找出這些使代價函數J取最小值的參數θ0和θ1(就是後面的梯度降低法 對吧 我想咱們也不但願編個程序 把這些點畫出來 而後人工的方法來讀出這些點的數值 這很明顯不是一個好辦法 事實上 咱們後面就會學到 咱們會遇到更復雜、更高維度、更多參數的狀況 這在咱們在後面的視頻中很快就會遇到 而這些狀況是很難畫出圖的 所以更沒法將其可視化(維數高於3就沒法可視化 所以咱們真正須要的 是編寫程序來找出這些最小化代價函數的θ0和θ1的值

在下一節視頻中 咱們將介紹一種算法 可以自動地找出能使代價函數 J 最小化的參數θ0和θ1的值

個人總結

方法=模型+策略+算法(來自李航的統計學習方法)(前面講了模型和策略,下面就要開始講算法)

這裏,咱們的模型是單變量線性迴歸模型,爲了引入學習算法,咱們學習了代價函數,學習算法的目標就是找出最優的參數,使得代價函數最小化。下面,就是咱們的學習算法:梯度降低算法。

 

Parameter Learning參數學習


Gradient Descent梯度降低法

  • 算法層次
  • 如何將代價函數J最小化?
  • 梯度降低法的核心思想?設置初始值,同步改變參數使得代價函數減少,直至找到局部最優解

咱們已經定義了代價函數J(就是差的平方和)(要達到看一眼就能立馬想到寫出公式的程度) 而在這段視頻中 我想向大家介紹梯度降低這種算法 (其實也很簡單:連續改變學習速率 * 偏微分斜率

這種算法能夠將代價函數J最小化 梯度降低是很經常使用的算法 它不只被用在線性迴歸上 它實際上被普遍的應用於機器學習領域中的衆多領域 在後面課程中 爲了解決其餘線性迴歸問題 咱們也將使用梯度降低法 最小化其餘函數 而不只僅是隻用在本節課的代價函數J

所以在這個視頻中 我將講解用梯度降低算法最小化函數 J 在後面的視頻中 咱們還會將此算法應用於具體的 代價函數J中來解決線性迴歸問題

下面是問題概述 在這裏 咱們有一個函數J(θ0, θ1)來源的模型可能有不少)也許這是一個線性迴歸的代價函數 也許是一些其餘函數 要使其最小化 咱們須要用一個算法 來最小化函數J(θ0, θ1) 就像剛纔說的 事實證實 梯度降低算法可應用於 多種多樣的函數求解 因此想象一下若是你有一個函數 J(θ0, θ1, θ2, ...,θn )能夠推廣到更多)你但願能夠經過最小化 θ0到θn 來最小化此代價函數J(θ0 到θn) 用n個θ是爲了證實梯度降低算法能夠解決更通常的問題 但爲了簡潔起見 爲了簡化符號 在接下來的視頻中 我只用兩個參數

下面就是關於梯度降低的構想

咱們要作的是 咱們要開始對θ0和θ1 進行一些初步猜想 它們究竟是什麼其實並不重要 但一般的選擇是將 θ0設爲0θ1也設爲0 將它們都初始化爲0 咱們在梯度降低算法中要作的 就是不停地一點點地改變 θ0和θ1 試圖經過這種改變使得J(θ0, θ1)變小 直到咱們找到 J 的最小值 或許是局部最小值

讓咱們經過一些圖片來看看梯度降低法是如何工做的 我在試圖讓這個函數值最小 注意座標軸 θ0和θ1在水平軸上 而函數 J在垂直座標軸上 圖形表面高度則是 J的值 咱們但願最小化這個函數 因此咱們從 θ0和θ1的某個值出發 因此想象一下 對 θ0和θ1賦以某個初值 也就是對應於從這個函數表面上的某個起始點出發 對吧 因此無論 θ0和θ1的取值是多少 我將它們初始化爲0 但有時你也可把它初始化爲其餘值

如今我但願你們把這個圖像想象爲一座山 想像相似這樣的景色 公園中有兩座山 想象一下你正站立在山的這一點上 站立在你想象的公園這座紅色山上 在梯度降低算法中 咱們要作的就是旋轉360度 看看咱們的周圍 並問本身 我要在某個方向上 用小碎步儘快下山 若是我想要下山 若是我想盡快走下山 這些小碎步須要朝什麼方向? 若是咱們站在山坡上的這一點 你看一下週圍 ​​你會發現最佳的下山方向 大約是那個方向 好的 如今你在山上的新起點上 你再看看周圍 而後再一次想一想 我應該從什麼方向邁着小碎步下山? 而後你按照本身的判斷又邁出一步 往那個方向走了一步 而後重複上面的步驟 從這個新的點 你環顧四周 並決定從什麼方向將會最快下山 而後又邁進了一小步 又是一小步 並依此類推 直到你接近這裏 直到局部最低點的位置

此外 這種降低有一個有趣的特色 第一次咱們是從這個點開始進行梯度降低算法的 是吧 在這一點上從這裏開始 如今想象一下 咱們在剛纔的右邊一些的位置 對梯度降低進行初始化 想象咱們在右邊高一些的這個點 開始使用梯度降低 若是你重複上述步驟 停留在該點 並環顧四周 往降低最快的方向邁出一小步 而後環顧四周 又邁出一步 而後如此往復 若是你從右邊不遠處開始 梯度降低算法將會帶你來到 這個右邊的第二個局部最優處 若是從剛纔的第一個點出發 你會獲得這個局部最優解 但若是你的起始點偏移了一些 起始點的位置略有不一樣 你會獲得一個 很是不一樣的局部最優解 這就是梯度降低算法的一個特色 咱們會在以後繼續探討這個問題 好的 這是咱們從圖中獲得的直觀感覺

看看這個圖 這是梯度降低算法的定義 咱們將會反覆作這些 直到收斂 咱們要更新參數 θj 方法是 用 θj 減去 α乘以這一部分 

:=   #表示賦值

讓咱們來看看 這個公式有不少細節問題 我來詳細講解一下 首先 注意這個符號:= 咱們使用 := 表示賦值 這是一個賦值運算符 具體地說 若是我寫 a:= b 在計算機專業內 這意味着無論 a的值是什麼 取 b的值 並將其賦給a 這意味着咱們讓 a等於b的值 這就是賦值 我也能夠作 a:= a+1 這意味着 取出a值 並將其增長1 與此不一樣的是 若是我使用等號 = 而且寫出a=b 那麼這是一個判斷爲真的聲明 若是我寫 a=b 就是在斷言 a的值是等於 b的值的 在左邊這裏 這是計算機運算 將一個值賦給 a 而在右邊這裏 這是聲明 聲明 a的值 與b的值相同 所以 我能夠寫 a:=a+1 這意味着 將 a的值再加上1 但我不會寫 a=a+1 由於這原本就是錯誤的 a 和 a+1 永遠不會是同一個值 這是這個定義的第一個部分

這裏的α 是一個數字 被稱爲學習速率 什麼是α呢? 在梯度降低算法中 它控制了 咱們下山時會邁出多大的步子 所以若是 α值很大 那麼相應的梯度降低過程當中 咱們會試圖用大步子下山 若是α值很小 那麼咱們會邁着很小的小碎步下山 關於如何設置 α的值等內容 在以後的課程中 我會回到這裏而且詳細說明

最後 是公式的這一部分 這是一個微分項 我如今不想談論它 但我會推導出這個微分項 並告訴你到底這要如何計算 大家中有人大概比較熟悉微積分 但即便你不熟悉微積分 也不用擔憂 我會告訴你 對這一項 你最後須要作什麼 如今 在梯度降低算法中 還有一個更微妙的問題 在梯度降低中 咱們要更新 θ0和θ1 當 j=0 和 j=1 時 會產生更新 因此你將更新 J θ0還有θ1

實現梯度降低算法的微妙之處是 在這個表達式中 若是你要更新這個等式 你須要同時更新 θ0和θ1 個人意思是在這個等式中 咱們要這樣更新 θ0:=θ0 - 一些東西 並更新 θ1:=θ1 - 一些東西 實現方法是 你應該計算公式右邊的部分 經過那一部分計算出θ0和θ1的值 而後同時更新 θ0和θ1 讓我進一步闡述這個過程 在梯度降低算法中 這是正確實現同時更新的方法 我要設 temp0等於這些 設temp1等於那些 因此首先計算出公式右邊這一部分 而後將計算出的結果 一塊兒存入 temp0和 temp1 之中 而後同時更新 θ0和θ1(一塊兒更新 由於這纔是正確的實現方法

與此相反 下面是不正確的實現方法 由於它沒有作到同步更新 在這種不正確的實現方法中 咱們計算 temp0 而後咱們更新θ0 而後咱們計算 temp1 而後咱們將 temp1 賦給θ1 右邊的方法和左邊的區別是 讓咱們看這裏 就是這一步 若是這個時候你已經更新了θ0 那麼你會使用 θ0的新的值來計算這個微分項 因此因爲你已經在這個公式中使用了新的 θ0的值 那麼這會產生一個與左邊不一樣的 temp1的值 因此右邊並非正確地實現梯度降低的作法 我不打算解釋爲何你須要同時更新

同時更新是梯度降低中的一種經常使用方法 咱們以後會講到 實際上同步更新是更天然的實現方法 當人們談到梯度降低時 他們的意思就是同步更新 若是用非同步更新去實現算法 代碼可能也會正確工做 可是右邊的方法並非人們所指的那個梯度降低算法 而是具備不一樣性質的其餘算法 因爲各類緣由 這其中會表現出微小的差異 你應該作的是 在梯度降低中真正實現同時更新 這些就是梯度降低算法的梗概

在接下來的視頻中 咱們要進入這個微分項的細節之中 我已經寫了出來但沒有真正定義 若是你已經修過微積分課程 若是你熟悉偏導數導數 這其實就是這個微分項 若是你不熟悉微積分 不用擔憂 即便你以前沒有看過微積分 或者沒有接觸過偏導數

在接下來的視頻中 你會獲得一切你須要知道的 如何計算這個微分項的知識 下一個視頻中 但願咱們可以給出 實現梯度降低算法的全部知識

 

Gradient Descent Intuition 梯度降低法直觀感覺


  • 直觀理解梯度降低算法
  • 學習速率
  • 偏導數項

在以前的視頻中 咱們給出了一個數學上關於梯度降低的定義 本次視頻咱們更深刻研究一下 更直觀地感覺一下這個 算法是作什麼的 以及梯度降低算法的更新過程有什麼意義

這是咱們上次視頻中看到的梯度降低算法 提醒一下 這個參數 α 術語稱爲學習速率 它控制咱們以多大的幅度更新這個參數θj. 第二部分是導數項 而我在這個視頻中要作的就是 給你一個更直觀的認識 這兩部分有什麼用 以及 爲何當把 這兩部分放一塊兒時 整個更新過程是有意義的

爲了更好地讓你明白 我要作是用一個稍微簡單的例子 好比咱們想最小化的那個 函數只有一個參數的情形 因此 假如咱們有一個代價函數J 只有一個參數 θ1 就像咱們前幾回視頻中講的 θ1是一個實數 對吧?那麼咱們能夠畫出一維的曲線 看起來很簡單 讓咱們試着去理解 爲何梯度降低法 會在這個函數上起做用

因此 假如這是個人函數 關於θ1的函數J θ1是一個實數 對吧? 如今咱們已經對這個點上用於梯度降低法的θ1 進行了初始化 想象一下在個人函數圖像上 從那個點出發 那麼梯度降低 要作的事情是不斷更新 θ1等於θ1減α倍的 d/dθ1J(θ1)這個項 對吧?

哦 順便插一句 你知道 這個微分項是吧?可能你想問爲何我改變了符號 以前用的是偏導數的符號 若是你不知道偏導數的符號 和d/dθ之間的區別是什麼 不用擔憂 從技術上講 在數學中 咱們稱這是一個偏導數 這是一個導數 這取決於函數J的參數數量 可是這是一個 數學上的區別 就本課的目標而言 能夠默認爲 這些偏導數符號 和d/dθ1是徹底同樣的東西 不用擔憂 是否存在任何差別 我會盡可能使用數學上的 精確的符號 但就咱們的目的而言 這些符號是沒有區別的 好的 那麼咱們來看這個方程 咱們要計算 這個導數 我不肯定以前你是否在微積分中學過導數 但對於這個問題 求導的目的 基本上能夠說 取這一點的切線 就是這樣一條紅色的直線 恰好與函數相切於這一點 讓咱們看看這條紅色直線的斜率 其實這就是導數 也就是說 直線的斜率 也就是這條 恰好與函數曲線相切的這條直線 這條直線的斜率正好是 這個高度除以這個水平長度 如今 這條線有 一個正斜率 也就是說它有正導數 所以 我獲得的新的θ θ1更新後等於θ1減去一個正數乘以α. α 也就是學習速率也是一個正數 因此 我要使θ1減去一個東西 因此至關於我將θ1向左移 使θ1變小了 咱們能夠看到 這麼作是對的 由於實際上我往這個方向移動 確實讓我更接近那邊的最低點 因此 梯度降低到目前爲止彷佛 是在作正確的事

讓咱們來看看另外一個例子 讓咱們用一樣的函數J 一樣再畫出函數J(θ1)的圖像 而此次 咱們把參數初始化到左邊這點 因此θ1在這裏 一樣把這點對應到曲線上 如今 導數項d/dθ1 J(θ1) 在這點上計算時 看上去會是這樣 這條線的斜率 這個導數是這條線的斜率 可是這條線向下傾斜 因此這條線具備負斜率 對吧? 或者說 這個函數有負導數 也就意味着在那一點上有負斜率 所以 這個導數項小於等於零 因此 當我更新θ時 θ被更新爲θ減去α乘以一個負數 所以我是在用 θ1減去一個負數 這意味着我其實是在增長θ1 對不對?由於這是減去一個負數 意味着給θ加上一個數 這就意味着最後我實際上增長了θ的值 所以 咱們將 從這裏開始 增長θ 彷佛這也是我但願獲得的 也就是 讓我更接近最小值了 因此 我但願這樣很直觀地給你解釋了 導數項的意義

讓咱們接下來再看一看學習速率α 咱們來研究一下它有什麼用 這就是我梯度降低法的 更新規則 就是這個等式 讓咱們來看看若是α 過小或 α 太大  會出現什麼狀況

這第一個例子 α過小會發生什麼呢 這是個人函數J(θ) 就從這裏開始 若是α過小了 那麼我要作的是要去 用一個比較小的數乘以更新的值 因此最終 它就像一個小寶寶的步伐 這是一步 而後從這個新的起點開始 邁出另外一步 可是因爲α 過小 所以只能邁出另外一個 小碎步 因此若是個人學習速率過小 結果就是 只能這樣像小寶寶同樣一點點地挪動 去努力接近最低點 這樣就須要不少步才能到達最低點 因此若是α 過小的話 可能會很慢 由於它會一點點挪動 它會須要 不少步才能到達全局最低點

那麼若是α 太大又會怎樣呢 這是個人函數J(θ) 若是α 太大 那麼梯度降低法可能會越過最低點 甚至可能沒法收斂 個人意思是 好比咱們從這個點開始 實際上這個點已經接近最低點 所以導數指向右側 但若是α 太大的話 我會邁出很大一步 也許像這樣巨大的一步 對吧?因此我最終邁出了一大步 如今 個人代價函數變得更糟 由於離這個最低點愈來愈遠 如今個人導數指向左側 實際上在減少θ 可是你看 若是個人學習速率過大 我會移動一大步 從這點一會兒又到那點了 對嗎?若是個人學習率太大 下一次迭代 又移動了一大步 越過一次 又越過一次 一次次越過最低點 直到你發現 實際上 離最低點愈來愈遠 因此 若是α太大 它會致使沒法收斂 甚至發散

如今 我還有一個問題 這問題挺狡猾的 當我第一次學習這個地方時 我花了很長一段時間才理解這個問題 若是咱們預先把θ1 放在一個局部的最低點 你認爲下一步梯度降低法會怎樣工做? 因此假設你將θ1初始化在局部最低點 假設這是你的θ1的初始值 在這兒 它已經在一個局部的 最優處或局部最低點 結果是局部最優勢的導數 將等於零 由於它是那條切線的斜率 而這條線的斜率將等於零 所以 此導數項等於0 所以 在你的梯度降低更新過程當中 你有一個θ1 而後用θ1 減α 乘以0來更新θ1 因此這意味着什麼 這意味着你已經在局部最優勢 它使得θ1再也不改變 也就是新的θ1等於原來的θ1 所以 若是你的參數已經處於 局部最低點 那麼梯度降低法更新其實什麼都沒作 它不會改變參數的值 這也正是你想要的 由於它使你的解始終保持在 局部最優勢 這也解釋了爲何即便學習速率α 保持不變時 梯度降低也能夠收斂到局部最低點 我想說的是這個意思

咱們來看一個例子 這是代價函數J(θ) 我想找到它的最小值 首先初始化個人梯度降低算法 在那個品紅色的點初始化 若是我更新一步梯度降低 也許它會帶我到這個點 由於這個點的導數是至關的 如今 在這個綠色的點 若是我再更新一步 你會發現個人導數 也即斜率 是沒那麼陡的 相比於在品紅點 對吧?由於隨着我接近最低點 個人導數愈來愈接近零 因此 梯度降低一步後 新的導數會變小一點點 而後我想再梯度降低一步 在這個綠點我天然會用一個稍微 跟剛纔在那個品紅點時比 再小一點的一步  如今到了新的點 紅色點 更接近全局最低點了 所以這點的導數會比在綠點時更小 因此  我再進行一步梯度降低時 個人導數項是更小的 θ1更新的幅度就會更小 因此你會移動更小的一步 像這樣 隨着梯度降低法的運行  你移動的幅度會自動變得愈來愈小 直到最終移動幅度很是小 你會發現 已經收斂到局部極小值

因此回顧一下 在梯度降低法中 當咱們接近局部最低點時 梯度降低法會自動採起 更小的幅度 這是由於當咱們接近局部最低點時 很顯然在局部最低時導數等於零 因此當咱們 接近局部最低時 導數值會自動變得愈來愈小 因此梯度降低將自動採起較小的幅度 這就是梯度降低的作法 因此實際上沒有必要再另外減少α 這就是梯度降低算法 你能夠用它來最小化 最小化任何代價函數J 不僅是線性迴歸中的代價函數J

在接下來的視頻中 咱們要用代價函數J 回到它的本質 線性迴歸中的代價函數 也就是咱們前面得出的平方偏差函數 結合梯度降低法 以及平方代價函數 咱們會得出第一個機器學習算法線性迴歸算法

Gradient Descent For Linear Regression 線性迴歸的梯度降低模型  


  • 專屬於線性迴歸的梯度降低函數

在之前的視頻中咱們談到 關於梯度降低算法 梯度降低是很經常使用的算法 它不只被用在線性迴歸上 和線性迴歸模型平方偏差代價函數

在這段視頻中 咱們要 將梯度降低代價函數結合 在後面的視頻中 咱們將用到此算法 並將其應用於 具體的擬合直線的線性迴歸算法裏    

這就是 咱們在以前的課程裏所作的工做 這是梯度降低法連續賦值 學習速率 偏微分) 這個算法你應該很熟悉 這是線性迴歸模型最簡單的函數) 還有線性假設和平方偏差代價函數差的平方之和

咱們將要作的就是 用梯度降低的方法 來最小化平方偏差代價函數 爲了 使梯度降低

具體計算線性迴歸模型下的偏導數項

爲了 寫這段代碼 咱們須要的關鍵項 是這裏這個微分項須要代入才能求解)   

因此.咱們須要弄清楚 這個偏導數項是什麼 並結合這裏的 代價函數J 的定義 就是這樣     一個求和項 代價函數就是     這個偏差平方項 我這樣作 只是 把定義好的代價函數 插入了這個微分式

再簡化一下 這等因而 這一個求和項 θ0 + θ1x(1) - y(i) θ0 + θ1x(1) - y(i) 這一項其實就是 個人假設的定義 而後把這一項放進去 實際上咱們須要 弄清楚這兩個 偏導數項是什麼 這兩項分別是 j=0 和j=1的狀況 所以咱們要弄清楚 θ0 和 θ1 對應的 偏導數項是什麼 我只把答案寫出來 事實上 第一項可簡化爲 1 / m 乘以求和式 對全部訓練樣本求和 求和項是 h(x(i))-y(i) 而這一項 對θ(1)的微分項 獲得的是這樣一項 對吧 計算出這些 偏導數項 從這個等式 到下面的等式 計算這些偏導數項須要一些多元微積分 若是你掌握了微積分 你能夠隨便本身推導這些 而後你檢查你的微分 你實際上會獲得我給出的答案 但若是你 不太熟悉微積分 別擔憂 你能夠直接用這些 已經算出來的結果 你不須要掌握微積分 或者別的東西 來完成做業 你只須要會用梯度降低就能夠

(牢記偏微分的求導結果,其實很簡單,平方消失了,2沒了,θ1多了x(i))

在定義這些之後 在咱們算出 這些微分項之後 這些微分項 實際上就是代價函數J的斜率 如今能夠將它們放回 咱們的梯度降低算法 因此這就是專用於 線性迴歸的梯度降低 反覆執行括號中的式子直到收斂 θ0和θ1不斷被更新 都是加上一個-α/m 乘上後面的求和項 因此這裏這一項 因此這就是咱們的線性迴歸算法 這裏的第一項 固然 這一項就是關於θ0的偏導數 在上一張幻燈片中推出的 而第二項 這一項是剛剛的推導出的 關於θ1的 偏導數項 提醒一下 執行梯度降低時 有一個細節要注意 就是必需要 同時更新θ0和θ1

要會自動腦補梯度降低法工做機理:一個二維的山地圖、一個擬合圖和輪廓圖

因此 讓咱們來看看梯度降低是如何工做的 咱們用梯度降低解決問題的 一個緣由是 它更容易獲得局部最優值 當我第一次解釋梯度降低時 我展現過這幅圖 在表面上 不斷降低 而且咱們知道了 根據你的初始化 你會獲得不一樣的局部最優解 你知道.你能夠結束了.在這裏或這裏。

可是 事實證實 用於線性迴歸的 代價函數 老是這樣一個 弓形的樣子 這個函數的專業術語是 這是一個凸函數     我不打算在這門課中 給出凸函數的定義 凸函數(convex function) 但不正式的說法是 它就是一個弓形的函數 所以 這個函數 沒有任何局部最優解 只有一個全局最優解 而且不管何時 你對這種代價函數 使用線性迴歸 梯度降低法獲得的結果 老是收斂到全局最優值 由於沒有全局最優之外的其餘局部最優勢

如今 讓咱們來看看這個算法的執行過程 像往常同樣 這是假設函數的圖 還有代價函數J的圖 讓咱們來看看如何 初始化參數的值 一般來講 初始化參數爲零 θ0和θ1都在零 但爲了展現須要 在這個梯度降低的實現中 我把θ0初始化爲-900 θ1初始化爲-0.1 這對應的假設 就應該是這樣 h(x)是等於-900減0.1x 這對應咱們的代價函數 如今 若是咱們進行 一次梯度降低 從這個點開始 在這裏.一點點 向左下方移動了一小步 這就獲得了第二個點 並且你注意到這條線改變了一點點 而後我再進行 一步梯度降低 左邊這條線又變一點 對吧 一樣地 我又移到代價函數上的另外一個點 再進行一步梯度降低 我以爲個人代價項 應該開始降低了 因此個人參數是 跟隨着這個軌跡 再看左邊這個圖 這個表示的是假設函數h(x) 它變得好像 愈來愈擬合數據 直到它漸漸地 收斂到全局最小值 這個全局最小值 對應的假設函數 給出了最擬合數據的解 這就是梯度降低法 咱們剛剛運行了一遍 而且最終獲得了 房價數據的最好擬合結果 如今你能夠用它來預測 好比說 假如你有個朋友 他有一套房子 面積1250平方英尺(約116平米) 如今你能夠經過這個數據 而後告訴他們 也許他的房子 能夠賣到35萬美圓    

最後 我想再給出 另外一個名字 實際上 咱們 剛剛使用的算法 有時也稱爲批量梯度降低 實際上 在機器學習中 咱們這些搞機器學習的人 一般不太會 給算法起名字 但這個名字"批量梯度降低" 指的是 在梯度降低的 每一步中 咱們都用到了全部的訓​​練樣本 在梯度降低中 在計算微分求導項時 咱們須要進行求和運算 因此 在每個單獨的 梯度降低中 咱們最終 都要計算這樣一個東西 這個項須要對全部m個訓練樣本求和 所以 批量梯度降低法 這個名字 說明了 咱們須要考慮 全部這一"批"訓練樣本 這確實不是一個 很好聽的名字 可是搞機器學習的人就是這麼稱呼的

而事實上 有時也有其餘類型的 梯度降低法 不是這種"批量"型的 不考慮整個的訓練集 而是每次只關注 訓練集中的一些小的子集 在後面的課程中 咱們也將介紹這些方法 但就目前而言 應用剛剛學到的算法 你應該已經掌握了批量梯度算法 而且能把它應用到 線性迴歸中了    

這就是用於線性迴歸的梯度降低法 若是你以前學過線性代數 有些同窗以前 可能已經學過 高等線性代數 你應該知道 有一種計算 代價函數J最小值的 數值解法 不須要梯度降低這種迭代算法 在後面的課程中 咱們也會談到這個方法 它能夠在不須要 多步梯度降低的狀況下 也能解出代價函數J的最小值 這是另外一種稱爲正規方程(normal equations)的方法 可能你以前已經 據說過這種方法 實際上在數據量較大的狀況下 梯度降低法比正規方程 要更適用一些 如今咱們已經 掌握了梯度降低 咱們能夠在不一樣的環境中 使用梯度降低法 咱們還將在不一樣的機器學習問題中大量地使用它

因此 祝賀你們成功 學會你的第一個機器學習算法 咱們稍後將有一些練習 這些練習會要求你 實現梯度降低 但願你們能讓這些算法真正地爲你工做 但在此以前 我還想先 在下一組視頻中 告訴你 泛化的梯度降低 算法 這將使 梯度降低更增強大 在下一段視頻中我將介紹這一問題。

 

Linear Algebra Review線性代數知識回顧


Matrices and Vectors矩陣和向量

咱們先複習一下線性代數的知識     在這段視頻中 我會向你們介紹矩陣向量的概念    

矩陣是指 由數字組成的矩形陣列 並寫在方括號中間    

例如 屏幕中所示的一個矩陣     先寫一個左括號 而後是一些數字     這些數字多是 機器學習問題的特徵值 也可能表示其餘意思     不過如今不用管具體的數字 而後我用右方括號將其括起來 這樣就獲得了一個矩陣         接下來 看一下其餘矩陣的例子 依次寫下1 2 3 4 5 6 所以實際上矩陣 能夠說是二維數組的 另外一個名字              另外 咱們還須要知道的是 矩陣的維度 應該寫做 矩陣的行數乘以列數

具體到這個例子 看左邊 包括1 2 3 4共4行 以及2列     所以 這個例子是一個 4 × 2的矩陣 即行數乘以列數 4行乘2列

右邊的矩陣有兩行 這是第一行 這是第二行 此外包括三列     這是第一列 第二列 第三列 所以 咱們把 這個矩陣稱爲一個 2 × 3維的矩陣     因此咱們說這個矩陣的維度是2 × 3維    

有時候你們會發現 書寫有些不一樣 好比左邊的矩陣 寫成了R4 × 2 具體而言 你們會將該矩陣稱做 是集合R4×2的元素 所以 也就是說 這個矩陣 R4×2表明全部4×2的矩陣的集合

而右邊的這個矩陣 有時候也寫做一個R2×3的矩陣 所以 若是你看到2×3 若是你看到 有些地方表達爲 4×2的或者2×3的 通常都是指 一個特定維度的矩陣    

接下來 讓咱們來談談如何 表達矩陣的某個特定元素 這裏我說矩陣元素 而不是矩陣 個人意思是 矩陣的條目數 也就是矩陣內部的某個數     因此 標準的表達是 若是A是 這個矩陣 那麼A下標 ij 表示的是 i j對應的那個數字 意思是矩陣的第i行第j列 對應的那個數     所以 例如 A11 表示的是第1行 第1列所對應的那個元素 因此這是 第一行和第一列 所以A11 就等於 1402      另外一個例子 A12 表示的是 第一行第二列 對應的那個數 因此A12 將等於191     再看一個簡單的例子     讓咱們來看看 好比說A32 表達的是 第3行第2列 對應的那個數     是吧 由於這是3 2 因此這等於1437 最後 A41 應該等於 第四行第一列 對應的數 因此是等於 147  我但願你不會犯下面的錯誤 但若是你這麼寫的話 若是你寫出了A43 這應該表示的是 第四行第三列 而你知道 這個矩陣沒有第三列 所以這是未定義的     或者你能夠認爲這是一個錯誤 根本就沒有什麼A43 對應的元素 因此 你不能寫A43

所以 矩陣 提供了一種很好的方式 讓你快速整理 索引和訪問大量數據

可能你以爲 我彷佛是 介紹了不少概念 不少新的符號 我講得很快 你不須要 把這些都記住 但在課程網站上 咱們已經發布了講義 全部這些定義都寫在講義裏 因此 你能夠隨時參考 包括這些幻燈片 你能夠隨時回來觀看視頻 若是你忘了A41究竟是表示什麼? 哪一行 哪一列是什麼? 因此如今不要擔憂記憶問題 你能夠隨時回來參考 課程網站上的材料 因此 這就是矩陣的定義

接下來 讓咱們來談談什麼是向量

一個向量是一種特殊的矩陣 向量是只有一列的 矩陣 因此 你有一個 n×1 矩陣 還記得嗎 N是行數 而這裏的1 表示的是列數 因此 只有一列的矩陣 就是咱們所說的向量

所以 這裏是一個向量的 例子 好比說 我有 n = 4 個元素     因此咱們也把這個稱爲 另外一個術語是 這是一個四維的     向量 也就意味着     這是一個含有 4個元素的向量 並且 前面咱們講 矩陣的時候提到過 這個符號R3×2 表示的是一個3行2列的矩陣 而對於這個向量 咱們也一樣能夠 表示爲集合R4     所以 這個R4是指 一個四維向量的集合    

接下來讓咱們來談談如何引用向量的元素     咱們將使用符號 yi來表明 向量y的第i個元素 因此 若是這個向量是y  那麼y下標i 則表示它的第i個元素 因此y1表示第一個元素 460 y2表示第二個元素     232 這是第二個元素 還有y3等於 315 等等 只有y1至y4是有意義的 由於這定義的是一個四維向量    

此外 事實上 有兩種方法來表達 某個向量中某個索引 是這兩種 有時候 人們會使用 1-索引 有時候用0-索引 所以 左邊這個例子 是一個1-索引向量 它的元素寫做 y1 y2 y3 y4     而右邊這個向量 是0-索引的一個例子 咱們的索引 從下標0開始     所以 元素從y0至y3 這有點像 一些初級語言中的數組     數組是從1開始 排序的 數組的第一個元素 通常時從y1開始 這是表示序列的符號 有時是從0開始排序 這取決於你用​​什麼編程語言

因此 事實上 在數學中 1-索引的狀況比較多 而對於不少 機器學習的應用問題來講     0-索引向量爲咱們提供了一個更方便的符號表達     因此你一般應該 作的是 除非特別指定     你應該默認咱們使用的是1-索引法表示向量

在本課程的後面全部 關於線性代數的視頻中 我都將使用1-索引法表示向量     但你要明白 當咱們談論到機器學習的 應用問題時 若是咱們須要使用0-索引向量的話 我會明確地告訴你 咱們何時換成     使用0-索引表達

最後 按照慣例 一般在書寫矩陣向量時 大多數人會使用大寫字母表示矩陣 所以 咱們要使用 大寫字母 如 A B C  X 來表示矩陣     而一般咱們會使用小寫字母 像a b x y     來表示數字 或是原始的數字 或標量 或向量 這是實際的使用習慣 咱們也常常看到 使用小寫字母y 來表示向量 但咱們平時 是用大寫字母來表示矩陣     因此 你如今知道了什麼是矩陣和向量 接下來 咱們將繼續討論關於它們一些內容

Addition and Scalar Multiplication加法和標量乘法

 

Matrix Vector Multiplication矩陣與向量的乘法

 

Matrix Matrix Multiplication矩陣與矩陣的乘法

 

Matrix Multiplication Properties矩陣乘法性質

 

Inverse and Transpose矩陣的逆運算和轉置運算

接下來 運用這些所學的工具 在接下來的幾段視頻中 咱們將介紹 很是重要的線性迴歸 咱們會看到更多的數據 更多的特徵 以及更多的訓練樣本 再日後 在介紹線性迴歸以後 咱們還將繼續使用這些線代工具 來推導一些 更增強大的學習算法

相關文章
相關標籤/搜索