1.最佳化問題
梯度下降法
步驟
- 搜集訓練資料
- 設計數學模型
- 訓練數學模型 - 反復輸入訓練資料,計算目標輸出與輸出的差異,作為參數的調整依據,找出一組結果差異最小的參數。
學習率(Learning Rate)
學習率是一個重要的超參數,它控制著我們基於損失梯度調整神經網絡權值的速度。
如何設定學習率?
可以動態方式設定學習率。以執行次數或時間為基準。一開始設置學習率較大,可以加快學習速度,隨後逐次調降學習率,使能逐漸畢竟極值而不容易跳脫。
如何評價數學模型的訓練效果?
- 給定測試資料
- 計算測試資料的平均誤差
- 改進誤差:重設起始值 / 重建數學模型
過度擬合(Overfitting)
模型對訓練資料的誤差趨勢越來越小,但對於測試資料的誤差卻越來越大。(對訓練資料的過度學習)
原因:資料量不夠 OR 特徵差異太大
解決TrainData差異太大的方式
- 對TrainData做正規化,也對TestData做正規化,再將結果做正規化,得到Output。
- TrainData做正規化,但Output不做正規化。(如果只是在做分類,不需要做正規化)
如何處理過度擬合(OverFitting)?
- 選用簡單的模型
- 資料清理、刪除
- 增加訓練資料 - 盡可能多的收集訓練資料,讓資料盡可能貼近真實的資料分佈情況。仔細觀察資料,找出關鍵的特徵元素。
-
2.遺傳演算法(GA)
步驟
染色體:將所有資料編碼成稱為“染色體”的字串
- 產生母體(Population):所有染色體中隨機產生n個初始字串
- 適應函數:依據求解條件設計適應函數(fitness function)
- 挑選:適應值高的染色體被挑選至交配池
- 交配 / 突變
- 產生子代
- 計算適應函數
- 替換交配池
- … … …
- 最後會產生最適解的一條染色體,將此染色體(即權重)帶回問題。
編碼(Encoding)
如何編碼?
原則:合法性、可行性、一致性
編碼方式:二元編碼【搜尋空間:2的L次方】、排列編碼【L!】(適用於有序、序列問題)、實數編碼【(1~9)9的L次方】、樹狀編碼交配(Crossover)
二元編碼的交配運算方法:單點交配、雙點交配、均勻交配(不只是固定點做交換,交配一次就可以換一個mask)突變(Mutation)
- 二元編碼:選擇一個bit做翻轉
- 排列編碼:選擇兩個位置做交換
- 實數編碼:選擇一個位置加減數值
-
選擇(Selection)
測量方法:適應函數
輪盤法:適應度越大,分配到的概率越大
競爭法執行前相關設定
設定編碼方式
- 設定族群數
- 設定選擇、交配、突變方式
- 設置交配率和突變率
停止條件
- 時間:具體的時間
- 次數:設定世代數
- 差異飽和:前後世代最佳值之差異低於極小值(極小值是自己設定的門檻),已經沒有很大變化了
收斂飽和 / 適應值:成熟率大於設定值(成熟:當族群中絕大部分的染色體都具有相同基因時)
挑戰
記憶體
-
缺點
直接的交換不合適。
突變也沒有方向。
沒有指向性表明上一代的演化是否是好的。3.螞蟻演算法
步驟
將問題轉換為路徑問題
- 初始化路徑上的費洛蒙濃度
- 讓螞蟻搜尋路徑
- 更新費洛蒙濃度
- … … …
-
人工螞蟻
費洛蒙
螞蟻走過的路就會留下一部分費洛蒙(留下多少費洛蒙是取決於走過這條路的長度;路線越短,留下的費洛蒙越多)
揮發機制:會陷入局部最佳解,應該公平對待所有可能的解。期望值
點到點之間線段的優劣。一直尋找最近的點不一定是最快到達的路徑。
轉換機率
優點
缺點
僅適用於組合最佳化問題
- 費洛蒙很容易使得演算法陷入局部最佳解 - 整體更新法(只有好的訊息和情報留下)、局部更新法(每一隻螞蟻找的路徑都會互相影響,費洛蒙濃度一直在改變)
- 讓螞蟻分散隨機尋找路線 - 探索 / 追隨
- 需要用到較多的記憶體
-
4.粒子群演算法(PSO)
全域最佳解演算法
利用決策中的兩種重要信息:自身的經驗、他人的經驗步驟
初始化及參數設定
- 隨機產生一群粒子(群體規模要合適,否則會影響運算速度和收斂性)
- 設定粒子i在時刻t的狀態下的屬性(位置向量:方向和速度)
- 搜索空間的上下限,學習因子,最大最小飛行速度,迭代次數,最大迭代次數,慣性權重,收斂精度
- 評估每一個粒子
- 測量適應值
- 從所有粒子中找出當前所有個體最佳極值
- 在t+1時刻粒子i根據更新公式更新速度和位置(先更新local,再更新global)
-
核心思想
分散式多點搜尋
- 記憶功能:每個粒子具有記憶性。記憶全域和區域的最佳解。利用以前尋找過的路徑去決定下一步的方向。
- 方向性:方向和速度
- 學習因子的調節
參數調節
慣性權重的調節
- 加入慣性權重
當慣性權重較大 — PSO傾向於開發者(大範圍搜索),全域搜尋。
當慣性權重較小 — PSO傾向於探測者(小範圍找尋),局部搜尋。
- 以線性遞減慣性權重
學習影子的調節
學習因子決定了粒子本身經驗與群體經驗對粒子運動軌跡的影響。
在搜索初期飛行主要考慮粒子本身的歷史信息,後期則注重社會信息。
挑戰
- 群體規模要合適,否則會影響運算速度和收斂性
由於粒子群演算法中沒有實際的機制來控制粒子的速度,所以有必要對速度的最大值進行限制(特別是飛行速度的上限,值太大會導致粒子跳過最佳解,太小會導致搜索空間不充分)
優點
實作方便且參數設置少
- 結合局部搜尋和全域搜尋
- 適合在連續性範圍內搜尋
- 可以被應用來解決大多數的最佳化問題
比較PSO與GA
PSO | GA | |
---|---|---|
相同 | 屬於多點搜尋 群體隨機初始化 對群體內每一個個體計算適應值 群體根據適應值進行複製 |
|
相異 |
1. 根據自己的速度決定搜尋
2. 粒子具有記憶性(交換正向資訊)
3. 所需參數設定較少
4. 適合連續性問題,也適合離散性最佳化問題
| 遺傳操作 - 交換、突變 |
5.決策樹
什麼時候決策樹?
- 用來處理分類問題的樹狀結構
- 每個內部節點表示一個評估欄位
- 每個分枝代表一個可能的欄位輸出結果
- 每個葉節點代表不同分類的類別標記
屬性選擇指標:資訊獲利(Information Gain)、吉尼係數
資料獲利:以熵(Entropy)為基礎。【熵:衡量資訊量的凌亂程度指標】
EX.當硬幣丟出正反面的數量是一樣的,熵是1(最凌亂)
資料獲利(Gain)越大越好,熵(Entropy)越小越好。
為什麼需要為每一個概率加上權重?
因為每個分支所佔的比例對整個集合計算出來的Gain會有很大的影響。譬如90%的資料已經分得很好了,10%的資料沒有分好,這樣的結果應該對於整體來說是好的才對。
Tree太深會有什麼影響?
分類時間久。計算成本和記憶體成本都變高。
步驟
- 資料設定(TrainData & TestData)
- 決策樹生成
- 剪枝:透過決策數不再增長的方式來達到修建的目的
修剪決策樹
- 事前修剪:選擇某一個屬性作為決策樹的一個內部節點,若該屬性的指標值(熵)低於預設的臨界值時,停止此節點及以下子節點的增長。
-
挑戰
重要:找到好的分割屬性 (分完要有清楚的結果)
避免過度適配資料
- 合併連續性屬性
- 屬性選擇指標的其他度量標準 - 訊息獲利、獲利比率、吉尼係數
- 處理缺少屬性值的訓練範例
- 處理不同代價的屬性
- 決策樹的可度量性
Train和Test所需時間比較
| | NN | 類神經網絡 | 決策樹 | | —- | —- | —- | —- | | Train | 只需要存資料,幾乎不佔用時間 | 要學習、記權重,需要很長時間 | 計算,慢 | | Test | 需要計算很多的距離,慢 | 快 | 只要做判斷是哪一類,快 |
6.最近鄰居分類(NN)
😀 Cover & Hart , 1968
根據現在已分類好的資料合集,找出與待分類資料最為鄰近的資料,根據此最鄰近資料所屬類別,對分類資料進行判斷和預測。
Tie-breaker
平手的時候要如何處理的問題
- 多數決(K設置為奇數)
- 加入距離權重
缺點
- 計算量大(過多的距離計算)【改進方法:對樣本資料進行組織和整理,分群分層】【最近鄰居快速搜尋法】
- 記憶空間需求量大(需儲存所有資料於記憶體)【改進方法:刪減部分樣本資料,著重有意義部分指標】【二分剪輯近鄰法】【重複剪輯近鄰法】
改進方法
- 最近鄰居快速搜索演算法:樣本集合的分解 ->快速搜索(群間過濾、群內過濾)
- 二分剪輯近鄰法:位於邊界處不同類別交疊樣本刪除,把資料分割得越來越明顯,使得類別被明顯區分開來
-
7.類神經網絡
感知器
類神經網絡運作模式
學習過程 - 從範例中學習,以調整網絡連接加權值
- 回想過程 - 由Input決定Output的過程
步驟
學習過程
- 設定網絡參數:設定神經元個數、層間的連結數
- 以均勻隨機亂數設定加權值矩陣、閥值向量的初始值
- 輸入TrainData的Input和Output
- 計算推論Output
- 計算差距量
- 計算加權值矩陣修正量及閥值修正量
- 更新加權值矩陣及閥值向量
- 重複3~7直到終止條件
回想過程