• Main idea
    • 大部分的時間Q-learning 都沒有善用到負的reward
    • 假若設牆壁的reward為-100的話,使用迷宮地圖當成實驗環境跑出來的數據會像下圖所示
    • image
    • 學習完的Q table只有靠近牆壁的Q值會變成負的,之後就不會再傳遞擴散了,這就是作者所說的負reward缺點,因此作者給出一個構想圖解釋
    • image

 

  • Proposed Method
    • image
    •  
    • 作者提出使用絕對值來更新Q value,如此一來負的reward就可以一直傳遞下去,圖三為作者的解釋,當要更新Q值的時候,原本的Q learning 演算法會下一個狀態最大的action value 做更新,但是遇到負的reward時,Q learning 通常都不會更新只會更新撞到牆壁的那一次,因此負的reward都不會傳遞開來,作者提出當要更新Q值的時候應該選擇argmax 絕對值大的來更新,如圖三所示,原本的Q learning 會選擇$a_1$,但作者提出應該使用$a_3$ 來做更新的動作(指公式三的p)
  • Experiment
    • 實驗環境
    • image​​​​​​​
      •  
      • exp-1. 1 positive area and 1 negative area are placed in the bait world.
      • exp-2. 1 positive area and 2 negative areas are placed in the bait world.
      • 作者提出兩個實驗環境,如上圖4所示,一個有兩個負reward的區域一個只有一個
      • 實驗結果
        • 實驗參數:the learning rate α = 0.1, and the discount factor γ = 0.9.
        • 實驗一:
          • image​​​​​​​
            • “exp1-p” 代表本文提出的方法,c 代表原本方法,pos代表正的reward 加總,neg代表負的reward 加總,由圖可以得知在正的reward兩種方法不相上下,但是在負的reward中作者提出的方法明顯比原來的方法好
          •  
        • 實驗二:
          • image
          • 在第二個實驗中表現更加明顯,因為第二個實驗環境有兩個負的reward區域,更能體現本文所提出的方法
        •  
  • Future
    • 作者認為在正的reward方面表現沒有很好,是未來需要改進的地方

Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()

PyQt5 安裝實測教學

1.安裝環境

首先使用Anaconda 的架構來安裝環境

# 創建一個叫做pyqt5的環境 
conda create -n pyqt5 python=3.6 # 安裝pyqt5 
pip install pyqt5 # 安裝pyqt5-tools(裡面有designer) 
pip install pyqt5-tools # 安裝打包環境程式檔 
pip install pyinstaller 

2.使用designer 建立UI檔案

安裝完後可以在以下的環境找到 designer.exe檔
D:\Anaconda_path\envs\pyqt5\Lib\site-packages\pyqt5_tools\Qt\bin

打開來會提供許多範本,隨便選一個創建一個新的UI介面

執行環境大概就如下圖所示,左邊有一排元件可以隨意的搭配使用,隨意拉取幾個元件後就可以把文件儲存下來

接下將檔案儲存成.ui附檔名

文章標籤

Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()

題目:

 
 留言

The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,

文章標籤

Darwin的AI天地 發表在 痞客邦 留言(1) 人氣()

1.abstract

此篇文章說明越深的網路越難學,經由此篇網路所介紹的shortcut技巧,resnet可以把網路加深到152層(比VGG網路深8倍),並且使用ensemble的技巧加上resnet可以使得網路在2015 Imagenet 測試集上得到3.57%的錯誤率,是當時ILSVRC2015 比賽的第一名。


上圖即是說明此現象,由圖可以看出,當網路從20層加深到56層的時候,錯誤率更高了,這現象同時體現在訓練集以及測試集中

2.main

作者的想法很簡單,就是把前一層的輸入透過一個連接方式連接到下一層,這麼做可以解決梯度消失的問題,分成兩種,一種稱做identity mapping就是直接拉一個連接點,但有時候F(X)與X的大小不一定完全一樣,這時候就要透過其他方法來讓兩者的大小相等

  • A:使用padding增加dimension
  • B:使用projection shortcuts,也就是使用1*1的卷積核增加dimension,其餘的使用identity mapping
  • C:全部使用projection shortcuts

Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()

DDPG也是延續著之前的觀念而來,是融合了Actor-Critic與DQN的experience replay而演化而來的演算法,完整架構圖如下所示,一樣是有兩個網路,Critic計算動作的好壞,Actor根據Critic網路調整參數獲得更好的策略

Critic network

Critic網路更新方式與之前介紹的Actor-Critic網路更新方式一樣,差別在於此處引用了兩個網路(target與now),這個概念源自於Double DQN,在此篇論文中發現一值更新同一個網路容易造成不穩定的現象,因此提出再創造一個網路(target)然後賦予相同的參數值,然後更新參數的時候更新原本的網路即可(now),等訓練一段時間後再把現now網路的參數再賦予給target網路,這麼做可以使得訓練更穩定,因此選取$q_{t+1}$的値時是選擇選取target網路所給予的q值

```python=
self.target_q = R + self.gamma * self.q_
self.loss = tf.reduce_mean(tf.squared_difference(self.target_q, self.q))
self.train_op = tf.train.AdamOptimizer(self.lr).minimize(self.loss)
``` 

Actor network

Actor 更新的概念很新穎,是採取連續微分的方式計算出action應該變動的方向,設計此網路時比較特殊,首先必須終止梯度計算倒傳遞到Actor網路,再來就是將Critic網路dq/da的梯度計算出來,然後再算出Actor網路da/dparams的微分,之後將兩者微分相乘並套用到Actor網路的參數上即可完成更新網路的動作了

```python=
#程式碼取自莫凡python
self.a = tf.stop_gradient(a)

# provided by Critic network
a_grads = tf.gradients(self.q, a)[0]   # tensor of gradients of each sample (None, a_dim)

# Actor network:caculate policy gradients
policy_grads = tf.gradients(ys=self.a, xs=e_params, grad_ys=a_grads)
train_op = opt.apply_gradients(zip(policy_grads, e_params))
```

Experirence replay

這概念也是源自於DQN網路,在訓練的過程中會持續的收集經驗,並且會設定一個buffer size,這個值代表要收集多少筆經驗,每當經驗庫滿了之後,每多一個經驗則最先收集到的經驗就會被丟棄,因此可以讓經驗庫一值保持滿的狀態並且避免無限制的收集資料造成電腦記憶體塞滿。

文章標籤

Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()

本方法使用兩個網路來達成學習動作,一為Actor網路,主要用來輸出動作,細心的讀者可能會發現這和之前所介紹的policy gradient的網路長的很像,沒錯!Actor網路就是從policy gradient 演化而來的,主要是改進policy gradient回合更新制的缺點,加了Critic網路之後就可以使用TD error當作advantage function做每步更新的步驟了

因此Actor-Critic演算法的核心理論就是

使用TD error當成policy gradient演算法的Advantage function

底下以莫凡python的github程式碼作解釋,有興趣可以自行觀看完整程式碼:

Critic network

 

文章標籤

Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()

今天要介紹RL的另一個家族Policy gradient,policy gradient顧名思義就是直接輸出動作機率,然後經由網路找出好的策略梯度方向進而慢慢改變神經元的權重使得網路輸出的策略達到最佳狀態,因此若此環境有n的動作的話,那麼輸出神經元就有n個,每個神經元的値分別代表不同動作的機率,因此選擇的動作的時候可以依據機率分布來挑選,這樣的學習方式稱為policy gradient,本文從兩個方向來了解PG演算法,分別是整合李弘毅老師的投影片[10]以及karparthy大神的Blog[4],不喜歡數學推導的可以直接跳到第二點。

1.Policy gradient 推導

本推導截自李弘毅老師的投影片,老師先從RL環境開始介紹起,如下圖所示,就是Actor網路與環境互動的過程,環境先給與初始環境s1,Actor網路接收到後預測出動作,之後將此動作輸入環境中又會使環境得到下一個狀態s2。

如此週而復始的循環就會得到一個Trajectory

因此可以假設得到上面這個Trajectory的機率為(得到s1狀態的機率)X(在s1狀態下採取a1這個動作的機率)X(在s1狀態並且採取a1的動作下與環境互動能得到s2的機率)…,一值周而復始的乘下去,數學表示式可以寫成最下面的連乘表示法

Expected reward則是使用期望值的概念來算出,窮舉所有可能出現的Trajectory並且把相對應的值與相對應的機率相乘做加總的動作就是網路採取theda這組參數所得到的Expected reward,PG演算法(Policy gradient)想解決的問題就是找到網路參數theda使得每次與環境互動時都可以得到最佳策略使之獲得的Expected reward能極大化,最後的等式則是論文上常表示的數學式。

文章標籤

Darwin的AI天地 發表在 痞客邦 留言(4) 人氣()

Channel Pruning for Accelerating Very Deep Neural Networks

1.abstract:

本篇論文作者提供一個壓縮網路的演算法,藉由使用Lasso regression來找出filter中所存在的冗員,套用此方法來壓縮模型可以使得VGG16加速五倍但錯誤率僅僅上升0.3%,在Resnet上錯誤率上升1.4%但速度可以提升兩倍,在Xception上錯誤率上升1%但速度也提升兩倍。

code 作者也開源放在github上了:https://github.com/yihui-he/channel-pruning

2.main idea:



整篇想法的最主要公式表示如(1)所示,找到最適當的beta以及W使得卷積出來feature map與原始feature map差距最小。beta的參數可以經由lasso regression算出來,若參數裡面包含越多0則代表壓縮率越高,意思就是可以經由矩陣轉換將一些filter清除掉,之後再稍為改變下還沒清除fiter的權重,若input channel由原本的32化簡成8(beta vector裡面有24個0),且稍為改變剩下的channel(8)中的權重發現卷積出來feature map與原始的output feature map差距不大,如此即可單單用input channel為8的卷積核做運算以提升效率。

Y

  • Optimal:

但式子(1)在數學上是屬於NP-hard問題,因此可以加入regression term來解決,具體概念可以參考下面連結

Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()

 

一.前言:

相信之前有看小編部落格假設環境的朋友一定不陌生下面這些文章


1.caffe 安裝教學 GPU 版本 --nvidia1070 ubuntu14.04
2.安裝 tensorflow 教學 GPU:Nvidia1070_from source
3.Ubuntu 16.04 nvidia-1070ti cuda9.0

 

那時小編從一個連Linux是什麼都不懂得新手開始學習搭建深度學習環境,一路跌跌撞撞,一邊解決Linux系統的bug,另一邊又解決相依程式的bug,等全部都弄好了之後一個禮拜的寶貴時間就已經悄悄的飛走了。

等後來慢慢接觸到Anaconda這套集合數據包後才讓我節省不少解決相依程式bug的時間,那時搭建一套深度學習環境已經可以讓我在一天內解決了

文章標籤

Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()

Building efficient convnets using redundant feature pruning

1.abstract:

本篇論文是基於Pruning filters for effecient convnets上的一個改進,前一篇論文選擇留下了最大的權重然後進行retrain來壓縮模型,在VGG16-CIFAR10的模型上得到了壓縮34%的結果,而套用本篇論文後壓縮的效果可以提升至40%,在Resnet-110也有相互比較但是只從38%變成39%,僅僅提升1%。

2.main method:

主要的概念就是引入分群法的概念來對channel做分群的動作,以cosin 距離來當作分群依據,在向量的世界中cosin距離越大的代表兩個向量的距離越相近,因此作者拿來當作刪除channel的依據,因為若兩者channel的向量相近的話代表其中一個是冗員,那麼即使刪除掉對整體準確率也不會造成太大的影響,因此此演算法的第一步就是將所有的channel做分群的動作,要砍成剩下多少channel數量就分成幾群,之後再從群集中隨便挑選一個代表,其餘的全部刪除,詳細演算法如下:

分群的方法是採取agglomerative clustering,此方法藉由合併兩個最相似的群集最終可以獲得一個tree的形狀,根據所選的群集數量可以在此一tree上任一劃一刀取出,演算法圖解如下,動畫圖摘自參考資料2:

上述演示的是以euclidean distance當作距離來量測,而本篇論文是採用cosine distance來當作距離量測,因此論文中定義兩群集合的平均距離如下所示,當兩個群集的相似度大於設定值時,則將兩個群集合在一起,最終會形成如上列所示的樹狀圖,之後再依造需求選取指定的群集然後做刪減channel的動作。

C_a: 叢集a,包含一群vector,單個代號以i表示
C_b: 叢集b,包含一群vector,單個代號以j表示

3.experiments

下表即為本篇論文與2017年論文(Pruning filters for effecient convnets)的互相比較,從表中可以得出在VGG-16這個網路中的確是優於前一篇論文許多,但在其他網路中相對的就沒顯得那麼出色了

Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()