Chapter 0.前言
2006年睡扬,Geoffrey Hinton等人發(fā)表了一篇論文谬哀,展示了如何訓(xùn)練能夠識(shí)別具有最新精度(> 98%)的手寫數(shù)字的深度神經(jīng)網(wǎng)絡(luò)。他們稱這種技術(shù)為“Deep Learning”绽族。當(dāng)時(shí)姨涡,深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練被廣泛認(rèn)為是不可能的,并且大多數(shù)研究人員自 20 世紀(jì) 90 年代以來(lái)就放棄了這個(gè)想法项秉。這篇論文重新激起了科學(xué)界的興趣绣溜,不久之后,許多新發(fā)表的論文表明娄蔼,深度學(xué)習(xí)不僅是可能的怖喻,而且能夠取得其他的 Machine Learning 技術(shù)都難以匹配的令人興奮的成就(借助巨大的計(jì)算能力和大量的數(shù)據(jù))。這種熱情很快擴(kuò)展到機(jī)器學(xué)習(xí)的許多的其他領(lǐng)域岁诉。
Deep Learning 快速發(fā)展的 10 年間和機(jī)器學(xué)習(xí)已經(jīng)征服了這個(gè)行業(yè):它現(xiàn)在成為了當(dāng)今高科技產(chǎn)品中的許多黑科技的核心锚沸,比如,為您的網(wǎng)絡(luò)搜索結(jié)果排名涕癣,為智能手機(jī)的語(yǔ)音識(shí)別提供支持哗蜈,為您推薦您喜歡的視頻,在 Go 游戲中擊敗世界冠軍坠韩。在你知道之前距潘,它都可能會(huì)駕駛您的汽車。
2只搁、您項(xiàng)目中的機(jī)器學(xué)習(xí)
現(xiàn)在你是不是對(duì)機(jī)器學(xué)習(xí)感到興奮音比,并且很樂意加入到這個(gè)陣營(yíng)中? 也許你希望給自己制造的機(jī)器人賦予一個(gè)自己的大腦氢惋?讓它可以面部識(shí)別洞翩?還是學(xué)會(huì)到處走走?
也許你的公司有大量的數(shù)據(jù)(用戶日志焰望,財(cái)務(wù)數(shù)據(jù)骚亿,生產(chǎn)數(shù)據(jù),機(jī)器傳感器數(shù)據(jù)熊赖,熱線統(tǒng)計(jì)數(shù)據(jù)来屠,人力資源報(bào)告等),如果你知道在哪方面觀察震鹉,你可能會(huì)發(fā)現(xiàn)一些隱藏著的瑰寶的妖。例如:
細(xì)分客戶,為每個(gè)團(tuán)隊(duì)找到最佳的營(yíng)銷策略
根據(jù)類似客戶購(gòu)買的產(chǎn)品為每個(gè)客戶推薦產(chǎn)品
檢測(cè)哪些交易可能是欺詐行為
預(yù)測(cè)下一年的收入
更多應(yīng)用
無(wú)論什么原因足陨,你決定開始學(xué)習(xí)機(jī)器學(xué)習(xí),并在你的項(xiàng)目中實(shí)施娇未,這是一個(gè)好主意墨缘!
本書假定你對(duì)機(jī)器學(xué)習(xí)幾乎一無(wú)所知。它的目標(biāo)是給你實(shí)際實(shí)現(xiàn)能夠從數(shù)據(jù)中學(xué)習(xí)的程序所需的概念镊讼,直覺和工具宽涌。
我們將介紹大量的技術(shù),從最簡(jiǎn)單的和最常用的(如線性回歸)到一些定期贏得比賽的深度學(xué)習(xí)技術(shù)蝶棋。
我們將使用現(xiàn)成的 Python 框架卸亮,而不是實(shí)現(xiàn)我們自己的每個(gè)算法的玩具版本:
Scikit-learn 非常易于使用,并且實(shí)現(xiàn)了許多有效的機(jī)器學(xué)習(xí)算法玩裙,因此它為學(xué)習(xí)機(jī)器學(xué)習(xí)提供了一個(gè)很好的切入點(diǎn)兼贸。
TensorFlow 是使用數(shù)據(jù)流圖進(jìn)行分布式數(shù)值計(jì)算的更復(fù)雜的庫(kù)。它通過(guò)在潛在的數(shù)千個(gè)多 GPU 服務(wù)器上分布式計(jì)算吃溅,可以高效地訓(xùn)練和運(yùn)行非常大的神經(jīng)網(wǎng)絡(luò)溶诞。TensorFlow 是被 Google 創(chuàng)造的,支持其大型機(jī)器學(xué)習(xí)應(yīng)用程序决侈。于 2015年11月開源螺垢。
本書傾向于實(shí)際操作的方法,通過(guò)具體的實(shí)例和一點(diǎn)理論來(lái)增加對(duì)機(jī)器學(xué)習(xí)的直觀理解赖歌。雖然你可以在不拿筆記本電腦的情況下閱讀此書枉圃,但是我們強(qiáng)烈建議你通過(guò)?https://github.com/ageron/handson-ml?在線實(shí)現(xiàn) Jupyter notebooks 上的代碼示例。
本書假定您有一些 Python 編程經(jīng)驗(yàn)孽亲,并且比較熟悉 Python 的主要科學(xué)庫(kù),特別是 NumPy肄扎,Pandas 和 Matplotlib 墨林。
另外,如果你關(guān)心的是底層實(shí)現(xiàn)/原理犯祠,你應(yīng)該對(duì)大學(xué)水平的數(shù)學(xué)(微積分旭等,線性代數(shù),概率和統(tǒng)計(jì)學(xué))有一些了解衡载。
如果你還不了解 Python搔耕,http://learnpython.org/?是你學(xué)習(xí)使用 Python 的好地方。 python.org 官方教程也是相當(dāng)不錯(cuò)的痰娱。
如果你從未使用過(guò) Jupyter 弃榨,第 2 章將指導(dǎo)你完成安裝和基本操作:它是你工具箱中的一個(gè)很好的工具。
如果你不熟悉 Python 的科學(xué)庫(kù)梨睁,提供的一些 Jupyter notebook 包括了一些教程鲸睛。還有一個(gè)線性代數(shù)的快速數(shù)學(xué)教程。
這本書分為兩個(gè)部分官辈。
第一部分箱舞,機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí),涵蓋以下主題:
什么是機(jī)器學(xué)習(xí)拳亿?它被試圖用來(lái)解決什么問(wèn)題晴股?機(jī)器學(xué)習(xí)系統(tǒng)的主要類別和基本概念是什么?
典型的機(jī)器學(xué)習(xí)項(xiàng)目中的主要步驟肺魁。
通過(guò)擬合數(shù)據(jù)來(lái)學(xué)習(xí)模型电湘。
優(yōu)化成本函數(shù)(cost function)。
處理鹅经,清洗和準(zhǔn)備數(shù)據(jù)寂呛。
選擇和設(shè)計(jì)特征。
使用交叉驗(yàn)證選擇一個(gè)模型并調(diào)整超參數(shù)瞬雹。
機(jī)器學(xué)習(xí)的主要挑戰(zhàn)昧谊,特別是欠擬合和過(guò)擬合(偏差和方差權(quán)衡)。
對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行降維以對(duì)抗 the curse of dimensionality(維度詛咒)
最常見的學(xué)習(xí)算法:線性和多項(xiàng)式回歸酗捌, Logistic 回歸呢诬,k-最近鄰,支持向量機(jī)胖缤,決策樹尚镰,隨機(jī)森林和集成方法。
第二部分哪廓,神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)狗唉,包括以下主題:
什么是神經(jīng)網(wǎng)絡(luò)?它們有啥優(yōu)勢(shì)涡真?
使用 TensorFlow 構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)分俯。
最重要的神經(jīng)網(wǎng)絡(luò)架構(gòu):前饋神經(jīng)網(wǎng)絡(luò),卷積網(wǎng)絡(luò)哆料,遞歸網(wǎng)絡(luò)缸剪,長(zhǎng)期短期記憶網(wǎng)絡(luò)(LSTM)和自動(dòng)編碼器。
訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的技巧东亦。
對(duì)于大數(shù)據(jù)集縮放神經(jīng)網(wǎng)絡(luò)杏节。
強(qiáng)化學(xué)習(xí)。
第一部分主要基于 scikit-learn 典阵,而第二部分則使用 TensorFlow 奋渔。
注意:不要太急于深入學(xué)習(xí)到核心知識(shí):深度學(xué)習(xí)無(wú)疑是機(jī)器學(xué)習(xí)中最令人興奮的領(lǐng)域之一,但是你應(yīng)該首先掌握基礎(chǔ)知識(shí)壮啊。而且嫉鲸,大多數(shù)問(wèn)題可以用較簡(jiǎn)單的技術(shù)很好地解決(而不需要深度學(xué)習(xí)),比如隨機(jī)森林和集成方法(我們會(huì)在第一部分進(jìn)行討論)歹啼。如果你擁有足夠的數(shù)據(jù)充坑,計(jì)算能力和耐心减江,深度學(xué)習(xí)是最適合復(fù)雜的問(wèn)題的,如圖像識(shí)別捻爷,語(yǔ)音識(shí)別或自然語(yǔ)言處理。
有許多資源可用于了解機(jī)器學(xué)習(xí)也榄。Andrew Ng 在 Coursera 上的?ML 課程和 Geoffrey Hinton 關(guān)于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的課程都是非常棒的,盡管這些課程需要大量的時(shí)間投入(大概是幾個(gè)月)司志。
還有許多關(guān)于機(jī)器學(xué)習(xí)的比較有趣的網(wǎng)站甜紫,當(dāng)然還包括 scikit-learn 出色的?用戶指南。你可能會(huì)喜歡上?Dataquest?骂远,它提供了一個(gè)非常好的交互式教程囚霸,還有 ML 博客,比如那些在?Quora?上列出來(lái)的博客激才。最后拓型,Deep Learning 網(wǎng)站?有一個(gè)很好的資源列表來(lái)學(xué)習(xí)更多。
當(dāng)然瘸恼,還有很多關(guān)于機(jī)器學(xué)習(xí)的其他介紹性書籍劣挫,特別是:
Joel Grus, Data Science from Scratch (O’Reilly). 這本書介紹了機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí),并在純 Python 中實(shí)現(xiàn)了一些主要算法(從名字上看就可以知道东帅,從頭開始)压固。
Stephen Marsland, Machine Learning: An Algorithmic Perspective (Chapman andHall). 這本書對(duì)機(jī)器學(xué)習(xí)有一個(gè)很好的介紹,涵蓋了廣泛的主題靠闭,Python 中的代碼示例(也是從零開始帐我,但是使用 NumPy)。
Sebastian Raschka, Python Machine Learning (Packt Publishing). 本書也對(duì)機(jī)器學(xué)習(xí)有一個(gè)很好的介紹愧膀,但是利用了 Python 的開源庫(kù)(Pylearn 2 和 Theano)拦键。
Yaser S. Abu-Mostafa, Malik Magdon-Ismail, and Hsuan-Tien Lin, Learning fromData (AMLBook). 對(duì) ML 有一個(gè)相對(duì)理論化的介紹,這本書提供了比較深刻的見解扇调,特別是 bias/variance tradeoff (偏差/方差 權(quán)衡)(見第 4 章)矿咕。
Stuart Russell and Peter Norvig, Artificial Intelligence: A Modern Approach, 3rd Edition (Pearson). 這是一本很好的(并且很大)的書,涵蓋了包括機(jī)器學(xué)習(xí)在內(nèi)的大量主題狼钮。這有助于更加深刻地理解 ML 碳柱。
最后,一個(gè)很好的學(xué)習(xí)方法就是加入 ML 競(jìng)賽網(wǎng)站熬芜,例如 kaggle.com 莲镣,這樣可以讓你在現(xiàn)實(shí)世界的問(wèn)題上鍛煉自己的技能,并從一些最好的 ML 專業(yè)人士那里獲得幫助和見解涎拉。
本書使用以下印刷約定:
斜體 —— 指示新術(shù)語(yǔ)的圆,網(wǎng)址,電子郵件地址半火,文件名和文件擴(kuò)展名越妈。
等寬 —— 用于程序清單,以及段落內(nèi)用于引用程序元素钮糖,如變量或函數(shù)名稱梅掠,數(shù)據(jù)庫(kù),數(shù)據(jù)類型店归,環(huán)境變量阎抒,語(yǔ)句和關(guān)鍵字。
等寬粗體 —— 顯示應(yīng)由用戶逐字輸入的命令或其他文本消痛。
等寬斜體 —— 顯示應(yīng)由用戶提供的值或由上下文確定的值替換的文本且叁。
小松鼠圖標(biāo) —— 此元素表示一個(gè)小提示或建議。
小烏鴉圖標(biāo) —— 此元素表示一個(gè)普通的說(shuō)明秩伞。
小蝎子圖標(biāo) —— 此元素表示一個(gè)警告和注意逞带。
補(bǔ)充材料(代碼示例稠歉,練習(xí)題等)可以從?https://github.com/ageron/handson-ml?下載掰担。
這本書是為了幫助你完成工作。一般來(lái)說(shuō)怒炸,如果本書提供了示例代碼带饱,則可以在程序和文檔中使用它。除非你復(fù)制了大部分代碼阅羹,否則你無(wú)需聯(lián)系我們獲得許可勺疼。例如,編寫使用本書中幾個(gè)代碼塊的程序不需要許可捏鱼。銷售或者分發(fā) O’Reilly 書籍的 CD-ROM 例子需要獲得許可执庐。
通過(guò)引用本書和使用示例代碼來(lái)回答問(wèn)題并不需要獲得許可。將大量來(lái)自本書的示例代碼整合到產(chǎn)品文檔中并不需要獲得許可导梆。
我們感謝轨淌,但是并不要求,貢獻(xiàn)看尼。貢獻(xiàn)通常包括標(biāo)題递鹉,作者,出版商和 ISBN 藏斩。例如:“Hands-On Machine Learning withScikit-Learn and TensorFlow by Aurélien Géron (O’Reilly). Copyright 2017 AurélienGéron, 978-1-491-96229-9.”
如果您覺得您對(duì)代碼示例的使用超出了合理使用范圍或上述權(quán)限钓账,請(qǐng)隨時(shí)聯(lián)系我們:permissions@oreilly.com?嚎卫。
Safari (以前被稱為 Safari Books Online)是一個(gè)針對(duì)企業(yè),政府黄橘,教育工作者和個(gè)人的基于會(huì)員的培訓(xùn)和參考平臺(tái)。
會(huì)員可以訪問(wèn) 250 多家發(fā)布商的數(shù)千本圖書屈溉,培訓(xùn)視頻塞关,學(xué)習(xí)路徑,互動(dòng)教程和策劃播放列表子巾,其中包括 O’Reilly Media描孟,哈佛商業(yè)評(píng)論,Prentice Hall 專業(yè)人員砰左,Addison-Wesley 專業(yè)人員,Microsoft Press场航, Sams缠导, Que, Peachpit Press溉痢, Adobe僻造, Focal Press, Cisco Press 等孩饼。想要了解更多信息髓削,請(qǐng)?jiān)L問(wèn)?http://oreilly.com/safari?。
請(qǐng)向出版商發(fā)表有關(guān)本書的評(píng)論和問(wèn)題:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (在美國(guó)或者加拿大)
707-829-0515 (國(guó)際或地區(qū))
707-829-0104 (傳真)
我們有一個(gè)這本書的網(wǎng)頁(yè)立膛,在這里我們列出了勘誤表,例子和任何額外的信息梯码。你可以訪問(wèn)這個(gè)網(wǎng)頁(yè)?http://bit.ly/hands-on-machine-learning-with-scikit-learn-and-tensorflow
要評(píng)論或者詢問(wèn)有關(guān)本書的技術(shù)問(wèn)題宝泵,請(qǐng)發(fā)送電子郵件到?bookquestions@oreilly.com?。
有關(guān)我們的書籍轩娶,課程儿奶,會(huì)議和新聞的更多信息,請(qǐng)?jiān)L問(wèn)我們的網(wǎng)站?http://www.oreilly.com?鳄抒。
在 facebook 上找到我們:?http://facebook.com/oreilly
在 Twitter 上關(guān)注我們:http://twitter.com/oreillymedia
在 Youtube 上觀看我們的視頻:?http://www.youtube.com/oreillymedia
我要感謝我的 Google 同事,特別是 Youtube 視頻分類小組许溅,教給我很多關(guān)于機(jī)器學(xué)習(xí)的知識(shí)瓤鼻。沒有他們,我永遠(yuǎn)無(wú)法開始這個(gè)項(xiàng)目闹司。特別感謝我的個(gè)人 ML 專家:Clément Courbet, Julien Dubois, Mathias Kende, Daniel Kitachewsky, James Pack, Alexander Pak, Anosh Raj, Vitor Sessak, Wiktor Tomczak, Ingrid von Glehn, Rich Washington, 以及 Youtube Paris 的所有人娱仔。
我非常感謝所有那些從繁忙的生活中抽出時(shí)間來(lái)仔細(xì)閱讀我的書的人。感謝 Pete Warden 回答了我所有的 TensorFlow 的問(wèn)題游桩,回顧第二部分牲迫,提供了許多有趣的見解耐朴,當(dāng)然也成為了 TensorFlow 核心團(tuán)隊(duì)的一員。你一定想要看看他的?博客?盹憎!非常感謝 Lukas Biewald 對(duì)第二部分的非常全面的審查:他毫不留情地嘗試了所有的代碼(并且發(fā)現(xiàn)了一些錯(cuò)誤)筛峭,做出了許多偉大的建議,而且他的熱情是具有感染力的陪每。你應(yīng)該看看他的博客影晓,和他的超酷的機(jī)器人!感謝 Justin Francis 檩禾,他也非常全面地審查了第二部分挂签,特別是在第 16 章提到了錯(cuò)誤并提供了很好的見解。你可以在 TensorFlow 上看到他的帖子盼产!
也非常感謝 David Andrzejewski饵婆,他審查了第一部分,提供了非常有用的反饋意見戏售,確定了不明確的部分并提出了改進(jìn)建議侨核。查看一下他的網(wǎng)頁(yè)吧。感謝 Grégoire Mesnil灌灾,他審查了第二部分搓译,并提供了非常有趣的關(guān)于神經(jīng)網(wǎng)絡(luò)的實(shí)用建議。感謝 Eddy Hung, Salim Sémaoune, Karim Matrah, Ingrid von Glehn,Iain Smears, 和 Vincent Guilbeau 對(duì)第一部分的審查和建議锋喜。我還要感謝我的岳父些己,前數(shù)學(xué)老師 Michel Tessier ,現(xiàn)在是 Anton Chekhov 的一名優(yōu)秀翻譯跑芳,幫助我在本書中提供了一些非常好的數(shù)學(xué)和符號(hào)轴总,并且審查了線性代數(shù) Jupyter notebook 。
當(dāng)然博个,對(duì)我親愛的弟弟說(shuō)一個(gè)巨大的 “謝謝” 怀樟,他測(cè)試了每一行代碼,幾乎在每個(gè)部分都提供了反饋盆佣,并鼓勵(lì)我從第一行到最后一行往堡。愛你,我的兄弟共耍。
非常感謝 O’Reilly 出色的員工虑灰,特別是 Nicole Tache ,他給出了深刻的反饋痹兜,并且總是開朗穆咐,鼓舞和樂于助人的。還要感謝 Marie Beaugureau, Ben Lorica, Mike Loukides, 和 Laurel Ruma 相信這個(gè)項(xiàng)目并幫助我確定其范圍。感謝 Matt Hacker 和所有的 Atlasteam 回答了關(guān)于格式化对湃,asciidoc 和 LaTeX 的所有技術(shù)團(tuán)隊(duì)問(wèn)題崖叫,也感謝 Rachel Monaghan, Nick Adams, 和所有的制作團(tuán)隊(duì)進(jìn)行了最終的審查和數(shù)百次的修正。
最后但也很重要的一點(diǎn)拍柒,我非常感謝我的愛妻 Emmanuelle 和三個(gè)非常棒的孩子心傀,Alexandre, Rémi, 和 Gabrielle ,在這本書中寫了很多拆讯,問(wèn)了很多問(wèn)題(誰(shuí)說(shuō)不能教 7 歲的孩子神經(jīng)網(wǎng)絡(luò)脂男?),甚至幫我送餅干和咖啡种呐。你還夢(mèng)想得到什么呢宰翅?