1219

1

為什么要學(xué)原理和公式推導(dǎo)

1)

現(xiàn)成的算法庫、學(xué)習(xí)框架。

數(shù)據(jù)輸入工具、框架中,

用幾行代碼指定模型的類型和參數(shù),

就能自動計算出結(jié)果。

2)

機器學(xué)習(xí)的原理和數(shù)學(xué)推導(dǎo)一定要學(xué)!

工具就像是武器,只是學(xué)會了這種武器最基本的招式和套路。

而理論學(xué)習(xí)即策略學(xué)習(xí),工具的活用,拆開綜合用,還有設(shè)計新工具

3)

我們將學(xué)到:

算法庫的安裝+庫函數(shù)的調(diào)用;

數(shù)據(jù)的 I/O 轉(zhuǎn)換。

會安裝幾個支持庫

會調(diào)幾個接口

4)

?DSAT 都 Fix 不了???

再多投入幾倍資源也達(dá)不到 95%——干脆直接用 Rule-Base 來解決?

……

ML/DL

新框架/工具/模型/算法

?TensorFlow?

?Caffe?

分類器

邏輯回歸

換成 RNN

5)

用這個譜聚類做數(shù)據(jù)預(yù)處理,歸根到底不還是利用詞袋模型算詞頻,

比直接計算 tf-idf 做排序能好多少呢?

6)

模型特質(zhì)

適用場景

數(shù)據(jù)匹配

算力和時間的消耗;

框架對軟硬件的需求和并行化的力度;

7)

針對技術(shù)需求,提供高質(zhì)量模型。

針對業(yè)務(wù)需求,提供高質(zhì)量的解決方案。

8)

優(yōu)化模型

選特征、調(diào)超參、換模型,

9)

?指標(biāo)有哪些,如何計算?

是怎么工作的?

超參數(shù)?

特征選取有哪些原則、方法可運用?

他們完全有可能針對具體業(yè)務(wù)問題,構(gòu)造出目標(biāo)函數(shù),甚至開發(fā)出符合自身軟硬件資源特點的求解算法。

?Google 一下 Best Practice

必須具備理論基礎(chǔ)和數(shù)學(xué)層面的建模能力才行。

————————————————

2

了解一件事是如何運行的,明晰事物發(fā)展的客觀規(guī)律,知道從最簡單的原理學(xué)著手逐層推進,比從一個已經(jīng)很復(fù)雜的狀態(tài)入手,一下子糾纏在各種不得要領(lǐng)的細(xì)節(jié)中要高效得多。

大多數(shù)人最常用的思維模型是 KV Pair,有些人似乎終身只有這一種思維模型。

對于原因和結(jié)果的關(guān)系,多數(shù)人根本沒想過去探究其轉(zhuǎn)換模型,而直接默認(rèn)是線性關(guān)系。

線性回歸模型:選定一些特征,針對每個特征獨立打分,最終加權(quán)求和(例如大學(xué)排名之類)。

問題待以后會回答:如何驗證打分

我分享出來只是想說明:學(xué)習(xí)機器學(xué)習(xí)原理和公式推導(dǎo),并非只是做一些無聊的數(shù)字變換。很可能由此為我們打開一扇窗,讓我們從新的角度看待世界,并為日常的思考過程提供更加可量化的方法。

3

以模型為驅(qū)動,了解“機器學(xué)習(xí)”的本質(zhì)

我選擇了幾種經(jīng)典模型

(例如:線性回歸、邏輯回歸、

決策樹、支持向量機、條件隨機場、

K 均值等),作為入門的進階。

一定要搞清楚其

問題域、模型函數(shù)、目標(biāo)函數(shù)、訓(xùn)練算法……潛入到數(shù)學(xué)公式推導(dǎo)的層面,

對每一步的公式變換和對應(yīng)的物理意義有所理解,然后再去實踐。

這一個個的模型,就是機器學(xué)習(xí)的“肌肉”,我們要通過觀察學(xué)習(xí)這一塊塊肌肉,

以其為載體來了解機器學(xué)習(xí)的核心——將事物轉(zhuǎn)化為數(shù)值,將關(guān)系、變換轉(zhuǎn)化為運算,以事實(數(shù)據(jù))為依據(jù),以規(guī)章(算法)為準(zhǔn)繩,通過計算來掌握事物的客觀規(guī)律(模型)。

要知道,這些經(jīng)典模型固然經(jīng)典,但是到了實際應(yīng)用中,它們并非神圣不可改變。也不是說機器學(xué)習(xí)就僅限于這些經(jīng)典模型。

只有掌握了機器學(xué)習(xí)精髓的人,才可能靈活運用現(xiàn)有模型去解決實際問題,甚至進一步針對具體問題得出自己的模型和算法。

反復(fù)學(xué)習(xí),從記憶到掌握

當(dāng)然,達(dá)到這種程度并非一蹴而就,總要從最簡單的模型開始。

多學(xué)幾遍,從頭到尾掌握整件事情的邏輯,知

掌握了事物內(nèi)在的邏輯,再去記憶,就容易多了。

學(xué)習(xí)標(biāo)準(zhǔn)設(shè)置得不必太高,比如可以這樣:

第一遍學(xué),只要求自己能完全掌握機器學(xué)習(xí)數(shù)據(jù)、模型、算法相互作用的基本關(guān)系,訓(xùn)練過程和評價標(biāo)準(zhǔn)。具體的模型,掌握最簡單的線性回歸就可以。

只要從頭到尾掌握了第一個模型,做到:能夠從模型函數(shù)開始推導(dǎo)出目標(biāo)函數(shù),再用梯度下降算法求解,用(偽)代碼實現(xiàn)梯度下降求解過程。

第一遍學(xué)習(xí)掌握一個模型;第二遍學(xué)習(xí)就不難掌握2-3個模型;第三遍就有可能掌握本課列出的大部分模型………如此由易到難,螺旋式推進。

對于一些本身就比較復(fù)雜的數(shù)學(xué)模型,比如條件隨機場、隱馬爾科夫這類涉及場論和勢函數(shù)的模型,如果直接入手,往往會卡在模型函數(shù)本身上。但是當(dāng)有了前面幾個模型的基礎(chǔ),了解了更抽象層面的原理,掌握起來就容易多了。

數(shù)學(xué)需要多精深?

。如果數(shù)學(xué)工具實在掌握得太少,最起碼也要讀懂一組公式推導(dǎo)中的第一個和最后一個式子:

讀懂它們都針對哪些變量進行了怎么樣的運算;

這些變量和運算的物理意義是什么;

第一個式子是對哪種真實場景的數(shù)學(xué)描述;

最后推導(dǎo)的結(jié)果又具備怎樣的特征。

enter image description here

兩條路徑反芻數(shù)學(xué)知識

所以,同學(xué)們應(yīng)力求理解每一步推導(dǎo)過程。

如果有可能,可以事先復(fù)習(xí)一下大學(xué)本科的高數(shù)(數(shù)學(xué)分析)、概率統(tǒng)計和線性代數(shù)?;蛘?,在學(xué)習(xí)模型的過程中,一旦遇到了數(shù)學(xué)上的阻礙,就回頭去查找相應(yīng)知識。

很多數(shù)學(xué)問題,之所以讓人頭大,其實并不是真的有多難,而是符號系統(tǒng)比較復(fù)雜,運算繁復(fù),或者運算所表達(dá)的物理意義多樣。

很多時候造成困擾是因為想不起來這里用到什么定理,哪個公式,或者這樣操作表達(dá)的含義是什么。

如果把常用的細(xì)小知識點都記錄下來,按主題整理成速查手冊(小字典),需要用的時候快速查找對應(yīng)的知識點,這樣我們的“機器學(xué)習(xí)”學(xué)習(xí)之路就順暢不少。

下面兩個是我自己制作的例子,供大家參考:

機器學(xué)習(xí)常用微積分知識速查手冊

機器學(xué)習(xí)常用線性代數(shù)知識速查手冊

日常學(xué)習(xí) Tips

記錄

準(zhǔn)備一個筆記本,紙質(zhì)版或電子版均可。有什么發(fā)現(xiàn)、感想、疑問、經(jīng)驗等等,全都記下來。

如果是對某個話題、題目有比較完整的想法,最好能夠及時整理成文,至少記錄下要點。

隔一段時間把筆記整理一下,把分散的點滴整理成塊,一點點填充自己的“思維地圖”。

分享

知識技能這種東西,學(xué)了,就得“炫耀”——把學(xué)習(xí)到的新知識、理論、方法,分享給更多的人。

如此一來,倒逼自己整理體系、記憶要點。這可以說是與人方便自己方便的最佳實例。

把自己的感想、體會、經(jīng)驗分享出來的同時,也鍛煉了自己的邏輯思維能力和歸納總結(jié)能力。一舉多得,何樂而不為?

以上談到的關(guān)聯(lián)、記錄、分享的內(nèi)容,大家都可以通過社群內(nèi)的學(xué)習(xí)筆記來提交。我會挑選優(yōu)秀的內(nèi)容進行點評和回復(fù)。


4

第04課:為什么要學(xué) Python 以及如何學(xué) Python

理解原理——涉及動手實踐

去訓(xùn)練一個模型,測試一些數(shù)據(jù),編寫一個算法

那些公式、函數(shù)、算法才能真的在頭腦中留下印象。


Python 是一種說人話的語言

開發(fā)者不需要關(guān)注底層;

不用自己費心照顧存儲、網(wǎng)絡(luò)等資源。

處理大量非結(jié)構(gòu)化數(shù)據(jù)

Python 的動態(tài)類型設(shè)計正好

語法簡單直觀,

表達(dá)形式一致。

Python 的設(shè)計理念就是讓不同的人所用的表達(dá)形式一致。

容易讀懂,容易整合。

直接運行。

一條條語句可以直接作為命令行運行

大量機器學(xué)習(xí)支持庫

研究人員和數(shù)據(jù)科學(xué)家,編程語言本身于他們而言僅僅是一種工具。

作為回報,他們向 Python 反哺了大量用于數(shù)據(jù)處理和機器學(xué)習(xí)的支持庫。

?NumPy 和 sklearn(scikit-learn)。

TensorFlow、Caffe 之類的深度學(xué)習(xí)框架,主體都是用 Python 來實現(xiàn),提供的原生接口也是 Python。

怎么學(xué) Python

買書當(dāng)然可以,不過不是必須,特別是,當(dāng)你學(xué)習(xí)編程的目的是要訓(xùn)練機器學(xué)習(xí)模型的時候。

個人認(rèn)為,

閱讀官網(wǎng)文檔或中文版教程

https://docs.python.org/3.7/tutorial/index.html

https://docs.python.org/3.7/index.html,

并在實踐中通過 Stack Overflow 直接查找所需實現(xiàn)問題的 Solution,

可能是比讀書更好的學(xué)習(xí)編程語言的方法。



推薦這本:由 Eric Matthes 撰寫的《Python 編程從入門到實踐》。

不管買不買書,下面的過程都差不多。個人建議按照下面的順序入手 Python。

(1)安裝 Python 運行環(huán)境。

就選 Python 3吧。

第一步,在你的系統(tǒng)上安裝好 Python 3。

(2)編寫第一個 Python 程序:“Hello world”。

雖然有效代碼只有:print(”hello world”)。

但注意,你需要嘗試至少三種不同的運行方法:

在命令行直接運行;

編寫一個 Python 文件,將 print hello world 封裝為一個函數(shù),通過 main 函數(shù)調(diào)用它來運行;

編寫一個 class,將 print hello world 封裝為一個 method,通過 main 函數(shù)創(chuàng)建 class 實例來運行 method。

(3)編寫一個或者多個復(fù)雜點的程序,用(2)中第2種或第3種方式執(zhí)行。

具體程序的功能可以自己定義,目的是借此了解下面這些概念:數(shù)據(jù)類型、變量、函數(shù)、參數(shù)、返回值、調(diào)用、遞歸……

學(xué)習(xí)流程控制:順序、條件、循環(huán)。

搞清幾種不同類型:array、list、dict、set 的用法。

在這個過程中,學(xué)習(xí)什么是靜態(tài)類型、什么是動態(tài)類型、什么是強類型、什么是弱類型,這些不同設(shè)計的目的和應(yīng)用場景分別是什么。

如果你實在不知道寫什么程序好,那就寫寫 binary search 和 quick sorting 吧。并順便嘗試一下遞歸和非遞歸的不同實現(xiàn)。


——這塊聽不懂


(4)編寫程序練習(xí)文件讀寫,文件和目錄操作。

如果使用支持庫封裝好的模型算法,

把數(shù)據(jù)在文件和各種類型的變量之間導(dǎo)來導(dǎo)去。

(所以務(wù)必學(xué)會將 tsv、csv 之類的文件讀入 array、list、dict 等結(jié)構(gòu)

以及將這些變量打印到文本文件中的方法。)——不會

(5)開始寫第一個機器學(xué)習(xí)程序。

(首先 import numpy 和 sklearn。

之前當(dāng)然要安裝這兩個支持庫,

一般安裝支持庫使用 apt-get 或者 pip,可以根據(jù)需要選用。)——不會


其次,找一個模型,比如 Logistic Regression,

網(wǎng)絡(luò)搜索該模型訓(xùn)練和測試的 Example Code,運行后看結(jié)果,

并閱讀 Example Code(下面是個例子)。


? ? from numpy import *?

? ? from sklearn.datasets import load_iris? ? # import datasets?

? ? # load the dataset: iris?

? ? iris = load_iris()?

? ? samples = iris.data?

? ? #print samples?

? ? target = iris.target?

? ? # import the LogisticRegression?

? ? from sklearn.linear_model import LogisticRegression?

? ? classifier = LogisticRegression()? # 使用類,參數(shù)全是默認(rèn)的?

? ? classifier.fit(samples, target)? # 訓(xùn)練數(shù)據(jù)來學(xué)習(xí),不需要返回值?

? ? x = classifier.predict(array([5, 3, 5, 2.5]).reshape(1,-1))? # 測試數(shù)據(jù),分類返回標(biāo)記?




? ? print x?

一則學(xué)習(xí) sklearn 和 Numpy 庫函數(shù)的調(diào)用,

一方面對 LR 有個感性認(rèn)識?!欢?/p>

(6)自己設(shè)置一個實際問題,并準(zhǔn)備數(shù)據(jù)。修改(5)的程序,用自己的數(shù)據(jù)訓(xùn)練并測試模型。

——懂也不懂以前

(7)逐行解讀(6)中調(diào)用的 sklearn 函數(shù)的實現(xiàn)代碼,

結(jié)合該模型的原理,對比印證,徹底搞懂一個算法的實現(xiàn)細(xì)則。

——同上

比如例子中的:classifier.fit() 和 classifier.predict()。

(8)不依賴 sklearn,自己動手實現(xiàn)一個訓(xùn)練 LR 模型的算法。

完成上面這些步驟后,你算是可以用 Python 輔助學(xué)習(xí)機器學(xué)習(xí)基礎(chǔ)知識了。

以上就是緒論部分需要學(xué)習(xí)的內(nèi)容,不知道同學(xué)們通過這兩天是否對為什么學(xué)習(xí)和怎么學(xué)習(xí)有了更深的理解?請把你的心得和問題通過學(xué)習(xí)筆記提交出來吧,我們一起研究,共同進步。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容