自學人工智能時記下的筆記系列(1)
先了解了人工智能思想的發展流程,在平時提及人工智能總是伴隨著很多新概念和新名詞,比如機器學習、深度學習、卷積、RNN、CNN、強化學習等等,很容易就繞暈在了,所以,第一步顯示厘清人工智能涵蓋的范圍、各個概念之間關系、目前的發展情況等,初學的話基本不涉及公式和演算法,
一、人工智能學習角度的逐步進化
1)機器學習角度1--專家系統
專家系統:基于行業專家提供的解決問題的既定規則,由系統自動執行判斷和操作,
專家系統的局限:實際問題數不勝數,出現無法預知的新情況,無法描述的隱性規則(例如沒有清晰明確的判斷規則),
2)機器學習角度2:基于符號推理的系統vs基于概率推理的系統
按照人類的邏輯學習知識,歸納和推演
基于符號和概率的推理還是基于人類已知知識,比如:10歲上學的孩子經常買文具,小明是一個10歲上學的孩子,所以買文具的概率很大,
3)機器學習角度3:學習人類如何學習,模擬人類的思維,仿生學習方法:聯結主義、進化演算法、強化學習
3.1)連結主義:機器模擬人腦神經元的連接模式進行學習,Hebb Law, 學習是改變連接,
例如:從生理上,狗看到食物會分泌唾液,給狗喂食的時候同時搖鈴,按這種模式訓練(學習)一段時間后,以后會發現只搖鈴狗也會分泌唾液,但如果持續一段時間的只搖鈴不喂食,狗慢慢也不會分泌唾液,
一波三折的連結主義:
高峰:Frank Rosenblatt 感知機(實物模擬神經元)--> 低谷:專家系統(雖然沒有學習能力)---> 高峰:Hopefield model (用磁針類比神經元,磁針會使周圍的磁針與其指向一致,產生關聯記憶的功能)---> 低谷:支持向量機、隨機森林(傳統基于統計的機器學習崛起)--> 高峰:深度學習(因為有了大資料、足夠的機器算力,出現CNN、RNN)
3.2)進化演算法:模擬生物進化學習,比如競爭、自然選擇的規則
有一個基因(規則)池子,進行競爭,競爭中的獲勝者可以加強自身基因(規則),最終勝利者的基因(規則)通吃,失敗者的基因(規則)被淘汰
適用于當有很大不確定行的時候,是一種破壞性創新演算法
3.3)強化學習:延遲滿足,行為反饋,通過對行為結果的反饋進行學習,進而調整行為,
二、機器學習:模擬人類思維
機器學習的主要方法
- 線性回歸regression,屬于監督學習
- 分類classification-KNN、概率-樸素貝葉斯、優先級處理-決策樹,屬于監督學習;
- 聚類,屬于無監督學習;
- 降維思維:PCA,屬于無監督學習,
(一)線性回歸
線性模型:Y =W0+W1X1+W2X2+......+WiXi+e, e為隨機擾動值
梯度下降 -> 線性回歸 -> 最優線性模型
欠擬合underfitting,過擬合overfitting
(二)分類
1. KNN(K近鄰演算法): nearest neiborhood
屬于監督學習
選擇顯著特征(非常重要!!),收集顯著特征的資料,把收集到的資料放在特征空間(比如x-y坐標軸)表示,
k表示找k個距離最近的鄰居,取這k個鄰居的多數狀態,比如點A的k個最近鄰居中大多數值為1,少數為0,則認為A的值為1,k的值越小越精確,但容易過擬合,k值也不是越大越好,太大(比如為所有資料)則無法有效分類,
距離的演算法:歐式距離Euclidean(平方差求和后開方)、曼哈頓距離(用于方塊類的街區,只能橫平豎直的走,不能走對角線)
花的品種辨別就是一個典型的分類問題,特征值較少時,可以用KNN,
高維空間(特征太多)時,距離會變得太模糊,很難通過距離分類,knn失靈,
2. 概率-樸素貝葉斯
屬于監督學習
樸素貝葉斯:
- 假設所有特征都是獨立的
- 公式:P(c|x) * P(x) = P(x|c) * P(c) c:結果,x:特征
- 當有多個特征x的時候,因為每個特征是相互獨立的,所以可以連乘
- P(c|X1,2,3,......,n) = P(x1|c)*p(x2|c)*......*P(xn|c) *P(c)
當特征太多時,可以考慮用樸素貝葉斯,
文章分類,用關鍵詞,可以使用樸素貝葉斯,
文章分類的步驟:已知某類文章(比如宗教類文章)中關鍵詞A(例如god)出現的概率,以及某篇未分類文章X中該關鍵詞A(god)的出現概率,則可以對文章X進行分類(是否宗教類),
3. 決策樹(最常用的分類方法)
是最接近人類決策的思路;由一串問題組成,每個問題都能將資料劃分出符合及不符合兩類,最終符合所有問題答案的資料點,則為最終選擇的結果,
比如,讓計算機猜心中所想的任人物,
(三)降維 Dimension Reduction
屬于無監督學習
常用于剔除冗余特征,比如將資料中的8個特征減少至更少的特征,可以用于減少過擬合的情況,
比如,在房價分析案例中,可以用降維剔除一些冗余特征,比如一般房屋面積越大,車庫面積就越大,所以當既有房屋面積又有車庫面積這兩個特征時,車庫數量對于房價預測是冗余的,可以剔除,
如何降維:PCA( Principle Compoent Analysis)
- 坐標變換
- 將原x,y特征組合變成v特征,抓住主要矛盾,
- 比如房價預測中,將房屋面積與車庫面積相加組合為房屋總面積特征,將2個特征降維成1個特征,再用這1個特征與房屋價格做線性回歸,
(四)聚類 Cluster
屬于無監督學習
將資料根據某種特定的假設進行分堆,
比如,將資料放在坐標軸上,發現不同組資料之間的距離不一樣,有一部分資料聚在一起,另一部分距離聚在一起,這兩部分資料之間距離較大,則可以將資料分堆,
三、神經網路:模擬人類大腦
三大類神經網路:
- 前向:Perceptron(P, 感知機), Feed Forward (FF), Deep FF(DFF), Radial Basis Network(RBF), CNN(卷積,處理影像)
- 帶反饋的(用于處理需要記憶的情景):Recurrent Nerual Network(RNN), Long/Short Term Memory(LSTM), Gated Recurrent Unit(GRU)
- 自編碼:Auto Encoder(AE), Variational AE(VAE), Denoising AE(DAE), Sparse AE(SAE)
自編碼器:深度學習鼻祖,可以自動剔除噪音,獲取最本質的特征,
Hinton: reducing the dimensionality with NN
(一)機器視覺:影像識別,讓機器看懂影像
1. 卷積 Convolution
卷積convolution:注意卷積與矩陣乘法完全不同
1維:長向量A(假設長度為9)與短向量B(假設長度為3)進行卷積,就是A從頭開始依次截取每3個一組的數與B相乘,最后得出卷積后的結果向量C,C的長度為9-3+1=7,
2維:卷積用的矩陣B(簡稱卷積核)與輸入矩陣A中對應大小的矩陣進行相乘,得出一個值,然后卷積核平移一列,再相乘,最后得出一個結果矩陣,
卷積具有平移不變性(普適),因為用來做卷積核的B不變,比如影像中的貓從影像中的位置移到了另一個位置,所以還是能提取出貓的影像,但是卷積先天不具有旋轉不變性,但可以通過不斷地學習獲得針對特定情況具有旋轉不變性的卷積核
不同的卷積核之間需要有激活函式f:卷積核,即一個矩陣,是一種線性關系,如果多層卷積之間沒有激活函式,則由于線性關系可以相加,所以多層線性卷積其實可以合并成一層線性卷積,因此如果想要實作多層卷積,則需要在兩個卷積核之間加入非線性函式(比如開閉門,非1即0),這個非線性函式也叫激活函式,
非線性函式,模擬神經元的電壓變化,比如接觸到足夠量的光信號之后,視網膜上的神經元會出現反映,即量變引起質變,
2. 池化pooling
最大池化max pooling:在既定的矩陣內找最大值,比如2*2的矩陣內有(1,2,3,4),最大池化即將該矩陣模糊化為最大值4.
池化適用于抓大放小,將圖片卷積后大量冗余的資訊踢出
例如:有一個12000*12000的矩陣,里面進過
3. 卷積的邏輯鏈
為什么要多層卷積?感受野擴大,比如,假設第一層選擇池化,選出3*3矩陣中最具代表性的數值作為第一層結果,即池化每一個結果對應的是原圖的3*3視野;第二層卷積的一個結果對應了第一層的3*3視野,即相當于對應原圖的9*9的視野,
- 邏輯 操作
- 平移不變--> 權值共享
- 區域資訊--> 稀疏互動
- 抓大放小 --> 加入池化
頂層特征的全面整合:全連接層,對通過卷積獲得的各項頂層特征整合在一起,最終實作一個概念,比如,通過卷積獲得了對影像中出現的眼睛、嘴、毛發、體型等特征的最終值,但這些特征不是最終目的,而是要將這些特征值整合起來,最終判斷出該影像里的是貓、狗、人等實物,
最終決策:softmax分類概率
機器視覺:給描述生成具體影像(例如影像生成、影像變換,例如生成貓圖、人臉變老)、給影像反饋描述(影像識別、目標檢測,例如識別云朵、人臉監測)、相似影像進行歸類(影像聚類,例如判斷哪些為人物照片)、語意識別(從衛星云圖中識別出樹木、道路等)
對抗網路:使用影像生成演算法創造一張貓圖,然后使用影像識別網路對生成的這張貓圖進行識別,判斷是真實的貓還是機器生成的貓,
(二)自然語言處理:讓機器聽懂故事
時間序列:因為對于大腦來說,文字、視頻是按時間順序一個個接收的,與靜態影像各要素一起展示不同,所以時間序列對于聽懂故事很重要,
所以,記憶能力很重要,是處理涉及時間序列資訊的基礎,如果沒有記憶能力,新的資訊會覆寫之前的資訊,就沒有辦法理解文字進而聽懂故事了,機器記憶時間的長短會對影響語言處理能力,
1. N-gram:RNN之前的語言模型
用單詞出現的概率判斷:出現單詞A之后,單詞B出現的概率更高,例如“我愛”之后出現“你”的概率比較高,出現”一“的概率就比較小,而”我愛你“之后出現”們“的概率會升高,比單獨出現”們“的概率要高,
根據單詞出現概率判斷,符合概率連乘:
- P(w1, w2,......,wt) = P(w1)*P(w2|w1)*P(w3|w2,w1)*......*P(w(t)|w(t-1),......, w2,w1)
- w(i) 代表一個單詞
- 假設每個單詞出現的概率只受前一個單詞的影響,則上述連乘公式可簡化為:P(w1)*P(w2|w1)*P(w3|w2)*......*P(w(t)|w(t-1)), 也稱為bigram
- 假設每個單詞出現的概率受前面兩個單詞的共同影響,則連乘公式可簡化為:P(w1)*P(w2|w1)*P(w3|w2, w1)*......*P(w(t)|w(t-1),w(t-2)), 也稱為trigram
N-gram:表示每個單詞出現的概率受前面n-1個單詞的共同影響,
2. RNN (Recurrent Neural Network)
通過回圈(回聲)創造記憶,可以根據之前的文字\單詞預測或生成下一個文字\單詞
將前序神經元中間層h(t-1)的資訊傳給下一個神經元的中間層h(t)
- 向量h(t) = tanh[向量w*向量h(t-1)+x(t)]
- 其中,向量w是常量,即不隨著時間的變化而變化,
- 上式右側第一項是來自上一時間點的資訊,第二項是來自外部的輸入,根據遞回可知第 t時刻的中間層h(t)包含了前面從1至t時間的輸入項x的資訊,
- tanh()是為了將里面的線性函式變成非線性函式
- 將上面的公式用python實作一步,如下:
#極簡版RNN,用于展示邏輯,一步反饋
class RNN:
#...
def step(self, x):
# update the hidden state (dot表示矩陣相乘)
self.h = np.tanh(np.dot(self.W_hh, self.h)+np.dot(self.W_xh, x))
#compute the output vector
y = np.dot(self.W_hy, self.h)
return y
最后,將y(t)輸入softmax函式,將y(t)數值變成概率,即將數值映射在0-1的區間內,softmax函式,輸入的數值越大則得到的概率越大,
如果每一步的輸入字母均來自外部,則是一個預測模型;如果將上一步輸出的字母作為下一步的輸入字母,則是一個語言生成模型,
生成模型是有衰減效應的,不能無限生成,因為每次傳遞的中間層都乘以了一個小于1的引數,所以肯定在某一步衰減到無法進行生成,
精細的語言編碼 : word2vec
- 考慮了單詞之間并不是完全獨立的,單詞之間是有一定的關聯度的,
- 有的單詞之間比較近(比如burger&sandwich,king&quenn更相近),有的關系比較遠(比如burger&king, sandwich&queen),
- word2vec將單詞編碼到空間中,空間距離越相近的單詞說明關聯更緊密,同時包含了語法的變換,比如me - my = you - your,
RNN也可以理解為一個自動編碼器,即RNN通過學習可以生成一個程式P,使得輸入資訊x變為輸出資訊y,
用RNN生成詩詞:
- CSM行編碼:先用CNN提取上文每一行的特征(如上文有兩行詩,則CNN分別提取第一行和第二行的特征)
- 再用RNN將上文的特征依次輸入下文(將第一行特征輸入第二行,再將第二行的特征作為背景輸入用于生成下文)
- RCM:背景提取模型,獲取背景關系背景資訊,RNN,
- RGM:下文生成模型,RNN,
3. LSTM
LSTM:為解決RNN隨時間衰減的問題,有記憶更長時間尺度的能力,
- LSTM是在RNN上加記憶cell和3道門(write gate, keep gate, read gate),先用記憶cell對保留本層資訊,類似建立了一個副本,再用門控制這個副本是否使用、是否傳入下一層使用,
- 輸入門write gate: 控制本層輸入的原資訊是否需要納入記憶,
- 保留門keep gate = 1-遺忘門forget gate:用于控制傳入到本層的所有過去資訊是否要保留(傳給下一層),還是遺忘(不傳給下一層),
- 輸出門read gate:控制是否將本層結果輸出,即是否讀取本層生成的結果,
- 在RNN的中間層h(t),再加一層變為c(t)
- LSTM中,遺忘門(保留門)最重要!
LSTM具體公式如下:
- i(t) = k*[Wxi*x(t)+Whi*h(t-1)+Wci*c(t-1)+bi]
- f(t) = k*[Wxf*x(t)+Whf*h(t-1)+Wcf*c(t-1)+bf]
- c(t) = f(t)*c(t-1) + i(t)*tanh[Wxc*x(t)+Whc*h(t-1)+bc], 其中tanh函式即為原RNN
- o(t) = k*[Wxo*x(t)+Who*h(t-1)+Wco*c(t)+bo)
- h(t) = o(t)*tanh[c(t)]
- 門變數i(t)是由x, h, c三個變數共同控制的,
四、強化學習
強化學習:延遲滿足,在不斷嘗試中根據結果調整后續行為,
強化學習(reinforced)與監督學習(supervised)的區別:給一張老虎的圖片,通過監督學習得到結果“老虎”,根據圖片得到固定的概念;通過強化學習得到結果“逃跑”,根據圖片得出下一步行為,
強化學習框架:
- 探索與收益的平衡:學會抽樣,動態調整策略
- 當下與將來的平衡:引入TD學習,Markov決策程序,避免聚區域最優
- 無限空間的探索:值函式學習,策略函式學習,建立世界模型
強化學習第一層:不確定性下的決策
- 試錯:行為與懲罰(學習騎車,不斷嘗試、摔倒、疼、再嘗試,學會),行為與獎勵(賭博),
- 根據不斷的試錯更新獲得收益的概率:先驗概率變成后驗概率
- 要考慮探索與收益的平衡:用中獎概率優化抽樣概率,更多在中獎概率高的池子中選擇,減少在中獎概率低的池子中選擇,則獎勵概率越高,
- 偽代碼: choice = numpy.argmax(pymc.rbeta(1+self.wins, 1+self.trials-self.wins))
強化學習第二層:獎勵是未來的,平衡當下與未來
- 多步復雜游戲,獎勵延遲獲取,例如圍棋游戲、掃地機器人
- 要衡量時間的價值,當下的行為vs未來的收益
- 引入狀態state:通過觀測obervation得到當前狀態,根據當前的狀態,判斷并作出行為,行為導致外部環境改變,再觀測得到當前狀態,周而復始,
- 計算未來的收益期望,選擇一個策略,使得對未來收益期望最大化,
狀態的值函式v(s):s代表當前狀態,看到目前的狀態就判斷是否能贏
行為的值函式Q(s, a):s代表當前狀態,a代表下一步行為,經驗
強化學習主要分為兩個學派:策略流派(policy optimization)和價值流派(dynamic programming)
TD更新:時間差分演算法更新,用下一步的狀態更新當前一步的狀態值,S(t) = R(t) + k*S(t+1),其中k為衰減函式,R(t)為當前一步狀態的獎勵值,
解決區域最優問題:加入隨機性,使得可以有機會突破區域最優,并走到全域最優點,Q學習,
強化學習第三層:探索無限空間的問題
- 用神經網路預測環境(狀態)的變化[S(t)-->S(t+1)],再用強化學習基于S(t+1)計算值函式,預測在該新環境(狀態)下的行為,然后不斷重復上述步驟,
- 例如圍棋:機器下第一步棋之后,用神經網路想象對手下一步棋(想象新狀態),然后基于想象出的對手的下一步棋(新狀態),利用強化學習得出自己的棋路,不斷重復,直至達到棋局終點,類似于人類在腦海中想象對方的棋路以及我方的應對措施,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287861.html
標籤:AI
上一篇:全新升級IoT Stack 2.0和度能2.0,百度持續加碼為產業智能化安全護航
下一篇:python系列教程82
