# AI演算法 ## 定義AI - 人工智慧(artificial intelligence),稱人工智能,是計算機科學領域的範疇,指讓機器具備和人類一樣的思考邏輯與行為模式,發展包括**學習(大量讀取資訊,並判斷何時使用該資訊)、感知、推理(利用已知資訊做結論)**,自我校正,以及如何操縱或移動物品 - 人工智慧發展領域包括但不限於:語音識別(speech recognition)、電腦視覺(computer vision)、與專家系統(expert systems) - 知識工程(knowledge enginnering)是過去人工智慧研究的核心部位,人工智慧發展的第一步,**亦即讓機器讀取大量的資料,讓機器能夠判斷物件,進行歸類統整,並能但對資料關聯度,知識工程的發展讓機器具備有專業知識** - 但要讓機器擁有嘗試,推論思考能力並解決問題卻相對困難 ### 機器學習 - 是近代人工智慧發展的另外一個核心,可分成監督學習(Supervised Learning),與非監督學習(Unsupervised Learning),其核心概念在於數據分析,在當前資訊科學領域的一大分支,透過機器學習,人工智慧可以處理的問題為「歸類問題」、「回歸問題」,例如:垃圾信件過濾程式。迴歸問題則會從輸入的資料庫中找出規律,利用迴歸分析發展出相對應的方程式,藉此做出準確的輸出(也就是所謂的預測)。 ### 機器知覺(machine perception) - 處理感知型的數據輸入,利用這些數據推倒人類面對世界的感官領域,包含視覺(人臉識別)、聽覺(語音識別)、觸覺等等 ## 議題:何謂人工智慧? - 人工智慧大致上可以分為以下四大塊 1. 模擬人類的思考(think like a human) 2. 模擬理性的思考(think rationally):數據科學相關,機器學習類 3. 模擬人類的行為(act like a human) 4. 模擬理性的行為(act rationally):強化學習相關 - 1、3關注的是人類在思考合作決策了,所需的知識、記憶和資訊處理技巧,並將這些理論模型透過機器進行實作,以達到模擬人類思考與行為目的 - 2、4關注的是理性和邏輯性的判斷,出發點通常是以邏輯和計算學為基礎 - 學術界對於知能的觀點以人類和動物的認知架構(Cognitive Architecture)加以定義,在這種定義下,一個人的認知能力不僅僅包含基本感官能力,短期記憶、長期記憶、專注力等,更有學習能力管理 ### 人類智能 vs. 人工智慧 - 一直到九零年代以前,人工智慧領域實作方法幾乎清一色是以人類的認知能力與智能為設計樣本,當時的人工智慧以模擬人類智能之知識、分析、演繹、歸納等能力為宗旨,與現今業界使用機器學習有不小差異(透過分析、演繹、歸納,去找尋理性的最佳解) ### 知識管理(Knowledge Base) - 人類利用許多結構性知識來輔助自然語言 - 例如:大象看到兔子,因為大象有眼睛所以為合理句子 - 例如:阿帕契發射飛彈、阿帕契來自於墨西哥,以及阿帕契是開放原始碼軟體。同時為合理(但也不合理),產生語義歧異性(semantic ambiguity) - 從上述兩個例子,可看出必須要依靠更精準語意分析去判斷,而很難可觀的去儲存知識,成為知識庫最大的缺點 - 知識管理雖然仍在搜尋引擎中廣為使用(多以知識圖 Knowledge Graph 的方式呈現),但其結構已不再是以豐富的結構性知識為主,而是以機器學習衍生出以統計學導向的語義關聯性為主。 ### 詞意辨識 - 早期詞義辨識的演算法大都利用利用辭典的定義 - Lesk (1986) 判斷目標詞的語境與辭典的哪一個意義的定義最接近,所採用的相似度計算方式,這些演算法跟目前常用的機器學習演算法相比正確率低許多 ### 語意分析 - 大部分語言分析應用場景先決條件就是「數據量要大,越大越準」,如果某個專業領域裡面只有寥寥數篇文件,例如新產品的行銷文案,專業技能的訓練課程等等,有什麼方法透過少量數據。做出像人的判斷 - 語意分析的結果往往會用一個詞頻分佈圖、關鍵字的文字雲…等方式呈現 - 問題是如何在最短的時間裡用語意分析來評估文本內文的品質好壞 - 但是相較於需要大數據的人工智慧,幾乎任何一個心智正常的經理人,都能只憑少少的幾篇文字,就做出準確的商業判斷 #### 原因 - 這是因為,大數據條件下的人工智慧運作方式,和人類做邏輯判斷的方式不太一樣,人類能夠過少量的資料就感知到一個句子是屬於有料或是沒料的 - 這種「資訊」與「收訊」之間的落差感,是否有科學解釋呢? 1. 以往在數據大時,我們就能統計方法,將一篇中文文章進行斷詞處理後,計算這篇文章的感受以及關鍵字,或是計算每個詞條出現的次數,以「詞頻」作為語意分析的素材 ### 舉例:這種「名稱很長」和「淡淡的沒什麼味道」之間的落差,該怎麼計算呢? - 如果要採用機器學習的話,會需要許多菜單的樣本以及食用後的客戶意見以及食用後的客戶意見,建立模型預測 - 但如果交給一個「具有專業領域知識的廚師」的話,他根本不需要吃過多少菜,就可以依據他對每一道食材以及料理方式的知識,告訴你答案 - 卓騰語言科技的「Articut 斷詞引擎」 ![](https://i.imgur.com/w4I20gw.png) - 在歐美語系中已有悠久應用歷史以及為了不同場景,而有許多不同版本,但以往幾乎不曾在「中文語意分析」中看到這種方法,主要的原因是因為常見的中文斷詞方案有的是詞性標記錯誤過多以致無法使用(例如jieba結巴斷詞),且中文詞性標記過於細導致操作複雜 - 透過小數據的語意分析技術(利用卓騰語言科技的「Articut 斷詞引擎」),我們可以在演講稿完成時就檢查計算 - 透過這個計算公式,我們也可以發現資訊密度高的文案,通常也避免了「誇張賣弄」、「行話」、「囉嗦」、「討論自己」等等 ### 機器學習和這種小語意分析 - 這兩種技術在本質上並不衝突,說不定可以結合兩者,例如累積足夠呈現統計意義的資料量,再採用大數據機器方法挖掘更多潛在優勢 ## 規則式系統 - 由於人工智慧除了知識以外,還需要式情況動作,這種模擬人類智能的架構在過去都是以專家系統的方式呈現,而專家系統又多以規則式系統呈現,所謂專家系統就是將我們認為正確的規則以「情況」(Context)、「目標」(Target)與「動作」(Action)三集合的方式呈現。 ## 非線性邏輯(Non-monotonic logic)和信仰跟新系統(Belief Revision) - 非線性邏輯系統的作用在於能自動移除不合理的結論,以維持系統的相容性(Consistency)而不會互相矛盾 ## 機器學習 vs 人工智慧 - 機器學習理論出自於統計學(最佳化問題),其功用在於使用統計數據來歸納出可用於預測的統計模型。隨著人工智慧領域對大型專案的實用性增加,機器學習便成為人工智慧最重要的領域,如今業界看到的人工智慧解決方案,幾乎都是以機器學習為主 ### Unsupervised Learning(非監督式學習) - 從未被標示的資料中找到可預測的模型,由於資料尚未被標示,很難去設定正確的辨識標準和雜訊,因此非監督式學習仰賴資料本身去尋找類聚合(cluster) - 非監督式學習包括:kmeans、principle component analyst、expectation Maximization - kmeans: ![](https://i.imgur.com/CdPO2Q4.png) - expectation Maximization:簡單來說,分為兩部,第一步為expectation step,第二步為maxmization step,第一步為利用觀察數據去估計參數,然後用這個估計值去計算蓋世函數的期望值,而第二步為利用過去估計的參數,帶入新資料找尋概似函數最大化時對應的參數(假設資料彼此獨立) - 用統計來說,第一步為利用資料估計概似函數,再通過簡森不等式去建立概似函數下界,第二步為通過之估計的參數去重複上一步,直到收斂 ### Supervised Learning(監督式學習) - 跟非監督式學習的差別就在,資料已經被明確標示,因此可以去設定辨識的「正確」標準(通常能明確地標示辨識結果) - 監督式學習包括:類神經網路(neural networks)、貝式學習(Bayesian Learning)、決策樹等等 ### 貝式統計 - LDA(linear dicriminant analysis):假設在不同class中的變異數皆一致,去檢查給定不同的資料中,取於哪一個類別的機率最高,所以會需要計算給定X=x下屬於哪個類別的機率大小,最後挑選最大的作為預測結果 - QDA(quadratic discriminant analysis):當將LDA中的共便異數矩陣假設修改,修改為不同類別中,共便異數矩陣不同,則為QDA - naive Bayes:假設特徵之間為獨立,亦即共變異數矩陣衛對角,其餘與LDA一致 - 分類樹:決策樹會根據訓練資料產生一棵樹,依據樹枝的決點對新樣本進行預測,通常決策樹演算法通常有幾種分支的好壞,例如information gain(Entropy(S)=−p+∗log(p+)−p−∗log(p−))、gini index ### 分類樹 - 分類樹的優點就是,他所構建出來的模型是非常有變化性的,不像回歸,因為決策樹是一個不單單決定於參數,還決定於數據的模型,故變化特別大,例如 - 隨機森林:隨機森林其實就是進階版的決策樹,所謂的森林就是由很多棵決策樹所組成,隨機森林是使用bagging加上隨機特徵採樣所產生出來的演算法,可以使結果不太容易過擬和,方法:首先從訓練集中抽取n筆資料出來,這n筆資料是可以被重複抽取的,假設有1000筆資料,且從中抽取100筆資料,裡面可能會有重複的數據,接著從這些資料中挑選k個特徵當成決策因子的候選,因此每棵樹都是用隨機的特徵當成決策因子的候選,重複第三步m次得到m棵樹,透過boostrap重複m次,最後再透過每棵樹採多數投票的方式決定,**隨機森林的隨機有兩方面,第一個為隨機取樣,在模型訓練的過程中每棵樹都會先從訓練集中隨機抽取n筆資料出來,又稱boostrap。第二個隨機為每一棵樹的特徵都是隨機選取的** ### xgboost - xgboost:extreme gradient boosting(極限梯度提升),是一種基於GBDT演算法,基本上只是做了一些優化,例如二階倒數使損失函數更精準,正則向避免過擬合 - xgboost屬於ensomble演算法,不是一個單一模型,而是結合多個模型得到的結果,第一個model根據預測原始訓練資料來建立,第二個model會去計算error(真實值跟預測值),然後第二個model會預測會預測error,依此類推,通常會將第一個model跟第二個model結果合併再一起(取平均等等),再繼續做第三個model,直到認為error非常小時,這一系列過程就稱為boosting。 - 為了要極小化損失函數,對每一個維度作微分,稱為梯度(gradient descent) ![](https://i.imgur.com/I865Jxg.png) - y(i)-F(X)即為負梯度(resudual=negative gradient) ![](https://i.imgur.com/JF9LFEY.png) ![](https://i.imgur.com/IOmXMwO.png) - xgboost跟lightGBM結構上的差別:連續變量劃分域值劃分向下節點時不同方法 - 連續變量再找域值時,最簡單就是全部數值都試試看,看哪一個gini降低最多之類的 - xgboost是傳統先將資料點排序在將關鍵點測試gini下降多少,後期版本跟新之後則是運用值方圖來進行連續變量的搜尋,僅將重要的變量試一下,可以加快速度,但準確度會降低 - adaboost實際上也是gradient boost的一種,只是將前一次每一個樣本點賦予新的權重,判斷錯誤的樣本點進行權重加大,正確樣本點權重減少 - lightGBM是用GOSS(gradient based one side sampling)方法決定如何劃分連續變量,利用起源於adaboost,故期望試更少的點,找到劃分,通過確定gradient大小,如果某一個數據gradient大,就認為對我們最後結果影響大,對於梯度大的資料權重較高, - 關於控制過擬和:最大深度 - 關於類別變數的處理:xgboost沒辦法做到(沒辦法指定哪些是連續變量、哪些是離散變量),lightGBM有自己的算法 - 控制計算速度:number of estimater想做幾個model(想做多少步),subsample:有放回的採樣或只想選取一部份 - xgboost防止overfitting:在計算節點分裂的時候,會計算分裂後兩邊的Similarity Score,這邊分母會加入λ當作防止overfitting的參數 ![](https://i.imgur.com/EFkOZNq.png) ### SVM - 目的:去尋找最佳超平面,透過尋找以最大間隔將兩類樣本分隔開,故svm最優化問題即為創造任意超平面,可以用下列方程式表示: ![](https://i.imgur.com/oNrLZEP.png) - 透過計算樣本點到超平面的直線距離,有了此直線距離,就能透過最大化求解去找出極大化margin的超平面,即為svm的核心,但在求解時,也會有限制條件,即為當樣本點到超平面距離為正時,y=1,當樣本點到超平面距離為負時,y=-1 - 距離最佳超平面最近的資料點,稱為支持向量,故決定最佳超平面的時只有支持向量會起作用,其他樣本點則沒有作用 - 優點: 1. svm是一個凸優化問題,故尋找到的最佳解一定是全域最佳,不會是局部最佳 2. 不僅適用於憲性問題,還是用於非線性問題(用核函數映射到高維度) 3. 處理高維度的資料時,不受影響(維度大於數據集時的問題),因為數據集的複雜度只取決於支持向量,並不是數據集的維度(分類樹、boosting等等) 4. 理論完善 - 缺點:會涉及m階矩陣計算(m為樣本的個數),因此svm不適合超大數據集 ## 常用機器學習優缺點 ### KNN - 優點:理論成熟,簡單易用,相比其他算法較為簡潔,且對數據沒有假設,準確度高,對異常值不敏感 - 缺點:對內存要求高,且KNN對每一次分類都會重新進行一次全局運算,對於樣本容量大的數據集計算量較大(**一般涉及距離計算模型都有這個問題,例如SVM**) ### 決策樹 - 優點:計算量相對小,且透過分類條件就能夠唯一確定一條分類,可解釋性高,樹結構可視化,且具有一定特徵選擇能力,能夠處理不相關特徵 - 缺點:屬於弱分類器,且容易過擬合,可以用bagging方式減少方差(隨機森林),boosting的方式减少偏差(如GBDT、xgboost),容易忽略數據集中特徵的相互關聯 ### 隨機森林 - 優點:具有防止過擬合的能力,精度比單個算法要好,且隨機森林可以處理缺失值,每棵樹可以獨立;同時生成,容易並行化操作,且可以得出feature的重要性,具有一定的特徵選擇能力 - 缺點:隨機森林已經被證明在某些噪音較大的分類或回歸上問題會過擬合(但其實會不會過擬合程度由採樣空間質量決定) ### GBDT - 優點:它是决策树的boosting算法,GBDT属于强分类器,一般情况下比回歸和决策樹預測精度精度要高;GBDT可以自己選擇損失函數,当損失函數為指數時,GBDT變為Adaboost算法 - 缺點:不是和高維稀疏特徵(年齡) ![](https://i.imgur.com/lZ9kT0N.png) ### xgboost - 優點(與GBDT相比): 1. 收斂速度快:GBDT在優化時只用到一階導數,xgboost對cost function做二階taylor展開 2. 正則化:一定程度防止過擬合,xgboost在cost function中加入正則向,用於控制模型的複雜度 3. 並行處理:XGBoost的並行並不是tree的並行,XGBoost也是一次迭代完才能进行下一次迭代的,XGBoost的並行為特徵劃分選取上,因為決策樹上最耗時的一個步驟為對特徵值進行排序(因為要確認最佳分割點),XGBoost在訓練之前,預先對數據進行排序,然後先保存,後面的迭代重複利用這個結構,大大減小計算量,就是在進行節點分裂時,需要計算每個特徵的增,選增益最大的那個特徵進行分裂,那麼各個特徵的增益計算就可以多線程進行 4. 列抽样:XGBoost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算。这也是XGBoost异于传统GBDT的一个特性。 ![](https://i.imgur.com/WJCFgbN.png) - 缺點:和其他树模型一样,不适合高维稀疏特征;算法参数过多,调参复杂,需要对XGBoost原理十分清楚才能很好的使用XGBoost ### SVM - 優點:可以使用和核函數向高維空間進行映射,屬於強分類器,且能夠處理非線性特徵的相互作用 - 缺點:SVM最大的缺點為會耗費大量的機器內存和運算時間,这也是为什么随着数据量越来越多,SVM在工业界运用越来越少的原因;对缺失数据敏感;对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数。 ### 貝式統計法 - 優點:源於古典統計理論,有穩定的分類效率,对小规模的数据表现很好,能个处理多分类任务,适合增量式训练(即可以实时的对新增的样本进行训练,對缺失值不太敏感,通常用於文本分類 - 缺點:假設貝式統計假設特徵之間是獨立的,在現實中往往不成立,且需要知道先验概率,并且先验概率在很多时候多是取决于假设,假设的模型可以有多种,从而导致在某些时候会由于假设的先验模型而使得预测效果不佳。因為是通過先驗分配和數據來決定分類的,所以分類決策存在一定錯誤率 ## RNN(極短期記憶,memory只會記得上個時間點發生的事) - Recurrent Neural Network - 應用:最常見的是slot filling,例如智慧訂票系統中,當我們說出:i would like to arrive taipei on november 2,系統中會有一個slot,系統中會有slot,辨識及儲存destination是什麼,日期是多少等等 - 可以利用feedforward network方法辨識 - 將文字以不同方法存儲成向量送進去(最簡單就是用one-of-k-encoding),如果可以將這些文字以向量形式傳遞到feedforward network,輸出會希望是一個分配(代表現在文字處於哪一個slot的機率) - 但會有一個問題 ![](https://i.imgur.com/RUkr3Du.png) - 因為出發地跟目的地可能會被搞混,但feedforward network沒有記憶性,故希望當身經網路讀到taipei前面有move時,就會有記憶性 - 故發展出了Recurrent Neural Network - Recurrent Neural Network中,每次hidden layer產生output時,這個output都會被存到memory去,當下次hidden layer產生output時,他就不只會考慮input,他還會考慮存在memory裡面的值 - 即使輸入一樣的input,他的output可能會因為memory而有不同的結果 - 很重要的一點為,今天輸入的sequence並不是獨立的 - Recurrent Neural Network是可以反向的,所以可以將正向Recurrent Neural Network跟負向Recurrent Neural Network中的hidden layer接給同一個output ### RNN優點 - GNN並不完全適合學習時間序列,因為CNN其實是針對影像處理所做的處理,例處理,例如pooling、receptive field、parameter sharing等等,都是針對影像獨有的特色進行處理,面對時間序列問題還是RNN(LSTM)) - LSTM可以長期保存記憶 ### 缺點 - 計算費時,每一個cell - 它可以处理100个量级的序列,而对于1000个量级,或者更长的序列则依然会显得很棘手 - ![](https://i.imgur.com/r9Z79ZT.png) - 每一个LSTM的cell里面都意味着有4个全连接层(MLP),如果LSTM的时间跨度很大,并且网络又很深,这个计算量会很大,很耗时 ### elman network - 指把hidden layer的值存起來,下次再讀出來 ### jordon network - memory存的是output的值,在下一個時間點讀出來 - jordon network原則上會有比較好的表現,因為Recurrent Neural Network的hidden layer並沒有目標值,故不確定學習到了什麼樣資訊 ## long short-term memory(LSTM)(比較常的短期記憶) - 相較於RNN,多了三個gate,第一個gate為input gate,當這個gate打開時,才會將hidden layer存起來,且這個input gate開關的時機由模型自己學習,第二個gate為output gate管理是否可以將memory的值讀出來,開關時機也是由模型自己學習。第三個gate為forget gate,主要管理使否將memory的值刪除或保留,也是由模型自己學習 - 故總共有4個input,分別為主要資料輸入、和控制三個gate的訊號 - 通常這些訊號會用sigmoid轉換,因為介於0~1之間,意極gate被打開的程度 - LSTM相當於一般的network中的nuarn改回memory cell,故參數需求量也是一般netork四倍 ![](https://i.imgur.com/QtXV74A.png) ![](https://i.imgur.com/3cYSv97.png) - LSTM資料input不只考慮原本資料,更把過去的output拿進來考慮,且也把過去hidden layer納入考慮,再乘上四個transform去當作控制四個gate的訊號 - 一般來說RNN就是在講LSTM,套件上有三種,LSTM、GRU(LSTM簡化版本,少了兩個gate)、simpleRNN(完全沒有gate) ## convolutional network - 主要是和影像分類有關,例如給模型一張照片,模型則會決定這張照片裡面有什麼東西 - 通常會假設束入圖片大小皆一致,故一般來說都會將圖片轉換成固定大小再放入辨識器 - 因為目標是分類,故輸出為one hot的vector ![](https://i.imgur.com/nE3ZfdQ.png) - 向量的長度可以決定辨識幾種 ![](https://i.imgur.com/5bReYlS.png) - 為了要將圖片轉換為向量,故會將圖片的寬、高、channels數,因為圖片的顏色都是以RGB三原色組成,故將此三類拉直他,總共會有長*寬*3個數字 ![](https://i.imgur.com/8EwPIap.png) - 故上述向量極為network輸入 - 如果hidden layer越大、m - auan越大,則模型探性越大,但overfitting機率也越高 #### 簡化一 - 根據第一個觀察,其值不用整個neuron都觀察整張圖片的資料,其實只灌觀察一些重要的地方就好了 ![](https://i.imgur.com/DSaKkd7.png) - 通常會有超過一個neuron去守備這些3*3 - 通常會希望stride設1 or 2,因為如果重要pattern出現在兩個receptive field中間,就會產生問題 - padding:補植,都補0,或是補平均 ![](https://i.imgur.com/hiFwNIm.png) #### 簡化二 - 除此之外,為了避免不同neuron偵測同樣pattern時重複性的問題,顧會簡化,通過兩個neuron共享參數的方法(全種一致),減少參數量 ![](https://i.imgur.com/TDOkd7n.png) #### 典型簡化方法 ![](https://i.imgur.com/SiLFQF3.png) ![](https://i.imgur.com/jlau3he.png) - 固有設定receptive field和parameter sharing的network就是CNN(其實變異性很大bias很大),是針對影像而言設計的演算法 ### 第二種解釋CNN方法 - convolution layer:就是裡面有很多filter,這些filter的大小為3*3*channel,一個convolution layer代表裡面的filter會去抓取圖片的pattern,通過內積 ![](https://i.imgur.com/j8gspEc.png) - 當我們將一張圖片通過convolution layer後產生的稱為feature map ![](https://i.imgur.com/3mrPTaF.png) - 當convolution layer層數越大時(network疊的越深),同樣是3*3的filter看得pattern會越深 ![](https://i.imgur.com/kys99sx.png) ### pooling [](https://i.imgur.com/yLHiSWP.png) - 通過將一張大的圖片做subsampling,例如將偶數column或奇數的row拿掉,不會影響辨識結果 - maxpooling:將filter中產生的數字,再經數字分駔,選一個代表(最大的),怎麼分,最大最小都自己決定 - 最後feature map變小 - 通常作法往往是convolution跟pooling交互使用,但還是有傷害(如果要觀察細小的部分時) ### 應用:alpha go - 將棋盤看成19*19解析度的圖片,channel為48(圍棋高手設計,叫吃、旁邊有沒有黑子等等),為什麼可以用在CNN上呢?因為圍棋跟影像有共通的特性,只要看小範圍就知道了,論文是認為5*5就可以看出重要的pattern - 但再做影像時,通常會做pooling,但是alpha go並沒有使用pooling ### CNN優點 - parameter sharing(權重共享策略)減少了訓練所需的參數,相同的權值可以讓filter不受信號位置來檢測信號的特性,使得訓練出來的模型一般性很強 ### CNN缺點 - CNN無法解決影像放大旋轉處理問題,雖然形狀不一樣,所以要將訓練資料作旋轉和大小調整,讓CNN看過旋轉和放大縮小的問題 - 梯度消失以及梯度爆炸 ## chatgpt - chatgpt它並不是連網路的,所以並不是所有答案都是從網路文章中搜尋摘要下來,故答案可能有時候會回答不是最新的答案 ![](https://i.imgur.com/8ob4g7D.png) - gpt3有1700億個參數,故chatgpt可能比她還多 - chatgpt同時還會考慮過去的資料 - chatgpt為語言模型,其目的為文字接龍 - 尋找函數的過程(訓練),跟測試是不同的,尋找函數的時候,蒐集網路資料,找到文字接龍的函數m,找到model後就不需要聯網了(網路搜尋) ### 關鍵技術:pre-train(預訓練)(又稱基石模型(foundation model)) - gpt=generative(生成) pretrain transformer ![](https://i.imgur.com/HOjkX6e.png) ![](https://i.imgur.com/JwMDKvX.png) - 但是如果只是依據資料進行監督式學習的話,找出的函式的能力是非常有限的,因為人類提供的資料是非常有限的 - 故chatgpt還仰賴了另外的一個技術可以無痛製造成對資料 - 就是通過網路上的所有資料讓機器去學習(不管正不正確都進行訓練) - gpt第一代是在2018年,當時訓練參數不大,只有117Million個,資料為1GB - 2019年推出GPT-2,參數為第一代10倍大,序列資料為40倍大 ![](https://i.imgur.com/WVfqKgb.png) ![](https://i.imgur.com/RgW8IV3.png) - 2020年GPT-3是第二代的訓練參數100倍大,DATA為570GB(450T before filtering) ![](https://i.imgur.com/wYYwFq5.png) - 到gpt3為止,訓練是不需要人工介入的 - chatgpt是需要人類介入的,chatgpt是gpt系列經過督導式學習的結果 - 再進行督導式訓練之前,透過大量網路資料進行訓練的過程稱之為預訓練(自督導式學習,因為是無痛生成的),繼續學習的過程稱為微調(finetune),故gpt為chatgpt的基石模型 - 除了督導式學習,還有加上增強式學習(reinforcement learning),chatgpt用的增強式學習為ppo演算法 - 在增強式學習中,人不是給機器答案,而是告訴機器現在這個答案是好還是不好,相較於增強式學習, 資料蒐集較容易(只需要付予好或不好),適用於人類自己都不知道答案的資料 ### 預訓練的優點 - 在做多語言上座預訓練後,只要交某一個語言的某一種任務,自動會學會其他語言 ### chatgpt衍生問題 - 如何精準提出需求 - chatgpt資料只有跟新到2021年 ![](https://i.imgur.com/smMmSu4.png) - 偵測ai生成的物件:一段聲音或是文字是不是ai生成的 - 不小心洩漏個資、秘密(machine unlearning) ## policy gradient(on policy) - 在reinforvement learning中有三個components,一個actor,一個environment,一個reward function - 如果是讓機器玩遊戲 1. actor就是讓機器操控遊戲搖桿、比如說向左向右、開火等等 2. environment就是遊戲的主機,負責控制遊戲的畫面,怪物怎麼移動,看到什麼畫面 3. reward function就是決定當你做什麼事情,發生什麼情況的時候 ,可以得到多少分數,比如說殺一隻怪獸得到20分等等 4. environment跟reward function是在學習之前就是先給定的 - 唯一能做的就是調整actor裡面的policy,使他可以得到最大的分數 ![](https://i.imgur.com/fqvLEOs.png) ![](https://i.imgur.com/A6OARPa.png) ![](https://i.imgur.com/zSGhpgC.png) ![](https://i.imgur.com/u8yxg7J.png) - 目的為:極大化expected reward ![](https://i.imgur.com/E7GlPNT.png) - 根據上圖,假設在observation s(t)執行動作a(t),最後發現tau的reward是正的,就要增加這項的機率 - 反之,如果observation s(t)執行動作a(t),最後發現tau的reward是負的,就要減少這項的機率 ![](https://i.imgur.com/EDYa42g.png) ![](https://i.imgur.com/rShTQi8.png) ![](https://i.imgur.com/JXlghHt.png) ![](https://i.imgur.com/ezhGCLG.png) ![](https://i.imgur.com/qLhC4pA.png) - 簡單來說,強化學習會先給定狀態(環境),再去做action,再將這個action傳入環境,在做下一個action - 第一步,先隨機讓機器玩遊戲(因為要有資料才能做policy gradient),有了資料後,再去計算gradient跟新模型,在讓模型跟環境互動,重複此步驟 - 有兩個問題要考慮: 1. 第一個就是add the baseline,因為如果reward都是正的話,在做policy gradient結果都是增加機率(梯度為正),且如果有些action模型模有學習到的話,會因為其他action而減少機率(所有action機率加總為100) 2. 對於s(t)執行a(t)得到好的reward,可能是在t之前的功勞,故reward要改成從t開始加總 ### 問題(on policy) - 當在計算policy gradient時,每一次用trajectory tau做expectation,當update參數以後,這個expectation就不對了,之前samle出旯的data就不能用了 - 所以policy gradient是一個很花時間的來sample(模型與環境互動的資料)演算法,因為每次agent跟環境互動完以後,就要update參數,每update參數一次,只能做一次gradient decent,接下來要重新update data,才能繼續update參數一次,故非常花時間 ## off policy - 如果希望從on policy 到off policy的話,要用到importance sampling ![](https://i.imgur.com/md6MbVJ.png) - 不用theta去跟還記作互動,利用importance sampling,就不用一值跟新資料了 - 期望值相同,但變異數會不一樣,如果p跟q差太多的話,會產生誤差(結果會不好) ![](https://i.imgur.com/LTWuyio.png) ![](https://i.imgur.com/hpgzeAb.png) ![](https://i.imgur.com/y6ckFqR.png) - KL diversion函數意思是theta跟環境互動與theta'跟環境互動績效的差別(actor行為上的差異) ![](https://i.imgur.com/Pp8zniu.png) ![](https://i.imgur.com/9uSfB5x.png) ![](https://i.imgur.com/0Tf9ryn.png)