2019-07-31

[人工智慧] 分群分類,決策樹,隨機森林與加強式學習

作者:夏肇毅 2019-07-30 初版

分群分類,決策樹,隨機森林與加強式學習

分群
分群就是將一大堆物件,根據它的屬性,將一些物件屬性比較相近的當成一群,然後將全部物件分到很多不同群裏。在實際的用例裡面,根據消費者的消費狀況,或年齡分佈,來分門別類。可能可以分成年輕族群,中年及銀髮族等。或者是根據消費的數據區分高端消費群或低端消費群。

分類

分類就是把一些未知的元件,分配到屬於已知的類別當中。比方說,我們已知有圓形,正方形和三角形。如果現在一個新的形狀進來,我們就要決定這個新的形狀是屬於圓形,正方形,還是三角形。這種將未知物件分配到已知類別的動作叫做分類。在影像識別中,好比輸入一些影像,然後判斷哪些是貓,哪些是狗,哪些是馬,哪些是人或是哪些是車子。就是把未知的照片指定到已知的類別裡面去,就叫分類。

決策樹

決策樹就是一種分類的方法,它根據不同屬性的數值來作為判斷的依據。將所有的屬性依照重要性與序排下,產生一棵樹狀的結構。然後我們就可以根據這些安排好的樹狀結構來判斷,用以決定輸入資料到底是屬於哪一個類別。產生決策樹的過程需要先做訓練。先將資料匯入,然後根據輸入的屬性來判斷,什麼樣的屬性數值會造成什麼結果。最上層的根部,就是挑選最重要的屬性。它的分枝,再放進還沒有用到的屬性。一層一層將未用的屬性放入,直到所有屬性都用完為止。訓練完做驗證運算的時候,只要將輸入的資料從最根部判斷起,看看它需要判斷哪一個屬性,然後根據屬性的數值決定要向左或向右或是其它的方向往下行進,一直到走到最末端的葉為止,然後你就知道它的輸出應該是什麼數字。

隨機森林

若我們用一個決策樹來做決定,它決定的方式就是一個固定的模式,永遠永都是用這樣子來做決策,所以有時候就會產生一些過擬合的偏差。如果我們改成用隨機抽取特徵的方式來產生新的決策樹,那可能產生的結果就不一樣。我們可將輸入樣本隨機挑出,並將特徵值隨機挑選以產生不同的決策樹森林。將輸入資料丟給產生的決策樹森林,然後再用平均值或者是投票的方法來產生輸出。

加強式學習

加強式學習的運行模型就是有一個環境和一個代理agent。這個代理可以送出一個行動a給環境,環境接受到這個a的動作以後,就回饋一個報酬r和狀態s組給代理。這樣的模式就一直循環運作,代理可以再根據接收到的狀態s和報酬r組來決定它要採取的行動a。整個加強式學習就是製定最佳政策p來決定,當接收到狀態s和報酬r的時候,該採取什麼樣的行動a,以獲得最好的報酬r
一個政策決定在什麼樣的狀態之下要做什麼動作,所以執行一個政策,就會產生一個軌跡,過程中要靠評價函數來運作。評價函數V決定了在什麼狀態之下的分數,所以寫V(s),其中s代表狀態。而評價函數Q,就決定在什麼狀態下的什麼動作的得分,所以寫成Q(s,a)a代表行動。
加強式學習的內容包括政策,報酬,狀態,行動。練習各種不同狀態下的行動,根據得到什麼樣的成果,給予不同的報酬。日積月累的練習之後,就可以得到在各種不同狀態之下的各種不同行動,它會得到什麼樣的成果。再把這個結果做成一個資料庫。以後發現同樣狀況再次發生時,就可以從資料庫中挑選報酬最高的行動來執行。

[人工智慧] 人工智慧簡介


作者:夏肇毅 2019-07-29 初版


人工智慧簡介

現在人工智慧已經可以開始做很多有用的事情。最大的貢獻是在影像識別方面,現在的精確度已經比以前好很多。很多像文字的識別已經可以到95%以上的正確率。在多國語言的翻譯上面,已經進行相當不錯的進展。經過多國語言的訓練,人工智慧可以做多國語言間的互譯。人工智慧主要運作方式,就是把你所需要的資料和想要的結果,一起丟給電腦來學習。看它出來結果跟你有想要的結果中間的誤差來調整裡面的參數。經過不斷的修正之後最後,可以把人工智慧的參數訓練成能產生跟你想要差不多的結果。
類神經網路裡面有相當龐大的節點或是神經元能夠記憶參數。在訓練的過程中,就好像會把訓練的資料轉換再記憶到神經元裡面,以做為識別樣本。所以類似的資料再次出現時,它就可以很會連結到相似樣本的神經元上面去,並以此來做分類的判斷。另一方面,它也可以跟據儲存的樣本,再重新產生出相似的資料輸出。所以類神經網路本身就是一個龐大的記憶庫,把所有的樣本轉化後再儲存起來。類神經網路是模擬人類的神經細胞結構。一個神經細胞,輸入到細胞體的就像一棵樹一樣的叫樹突。從細胞體輸出一根細細長長到下一個細胞的叫做軸突。樹突接受所有的訊號進入細胞體,然後累積起來。一旦這個些訊號的累積量超過一個觸發的水準,它就會送出一個輸出訊號經軸突給下一個細胞。所以類神經網路的神經元,可以接收輸入信號,再將每一個輸入訊號乘上一個權重,然後加總起來。再跟裡面儲存的偏移數相加,以後看看有沒有超過觸發的水準再輸出。
一個類神經網路就是由多個神經元組成一層。同一層的各個神經元都接到相同的輸入端。下一層的神經元,就會將上一層的各個輸出端當成自己的輸入。所以同一層的神經元大家都有一樣的輸入。然後經過自己的權重處理,所以會產生不同的輸出。類神經網路是依照輸出層的錯誤來調整各個層級的權重。我們將輸出層的錯誤的梯度,依照微分的連鎖律推導,由輸出端算出應分配到個輸入端的大小,然後將這個梯度向前面各層一步一步地傳遞過去。每一層的神經元收到這個倒遞傳回來的梯度大小之後,就根據它來調整本身的權重。這種反向傳播演算法(Rumelhart, Hinton,Williams, 1986)的發明,是類神經網路近年來大幅進步的主要原因。
學習過程中使用梯度下降法,就是根據誤差的梯度(類似斜率)來找出誤差的下降方向,並一直往最小值的方向來修正參數。好比在自動駕駛上面的路況識別,把實際路況一直餵給人工智慧。其中並標示每一個畫面哪邊是車子,哪邊是道路,哪邊是行人。經過重複訓練之後,人工智慧就就可以了解每一個畫面中,每個路況裡面可能什麼地方有行人,什麼地方是道路,什麼地方有障礙物等等。
檢測信號有沒有超過觸發水準的函數叫做活化函數。在訊號沒有超過度發水準的時候,活化函數的輸出值是0。一旦輸入超過了觸發水準,活化函數的輸出值就會變成1。一般常用觸發信號的活化函數有幾種。最簡單的,是一個階梯函數。這個階梯函數在輸入小於0的時候,輸出為0。而輸入大於0的時候,輸出為1。所以它的觸發點就是零。如果我們希望它的觸發點不是零的話,例如,我們希望它的出發點是2。那麼我們就可以把輸入先減2,然後再送進這活化函數去。這一個減2的動作,就是讓偏移數為-2一樣。
比較複雜的活化函數像sigmoid,它就不是像階梯函數一樣不連續變化,而是慢慢的變。sigmoid的問題是計算很慢,而且在輸出遠離出發點為最大值或最小值的時候,它的梯度都會趨近於零,也就是梯度會消失。另一種函數relu,它在輸入小於0的時候,輸出就等於零。而當輸入大於0的時候,輸出就等於輸入。這是常用的活化函數,它的好處是不會造成梯度消失。

[區塊鏈] 智慧政府與智慧學校的區塊鏈應用



作者:夏肇毅 2018-10-18 初版


智慧政府與智慧學校的區塊鏈應用

要推展區塊鏈分散式帳本技術DLTs到智慧政府與智慧學校的應用時,首先要了解現有不同性質的資料庫架構,包括:

-獨立分散資料庫
各自為政,無互操作性。如現行各單位的電腦中心,應付本身業務需求即可,各自獨立運作。針對單位資料交換的需要,會有通訊閘道的設立。

-集中式資料庫
所有資料全都匯集到中央資料庫。

-中央控管分散式資料庫
集中式資料控管,分區資料儲藏,由中央控制修正權。主要是處於不同地理區的單位,中間連線會有頻寬限制。所以平時就近存取資料,利用Replication Server 複製技術,將重要變動資料傳向他處。

如果原來是各自為政,無互操作性的獨立分散資料庫,那麼建立區塊鏈DLTs網路所帶來的好處,主要還是資訊整合的效益,也許改用中央控管分散式資料庫架構會性能更好。當要追求的是不易竄改的安全性時,那麼建立區塊鏈DLTs才有價值。所以貴重,有價值,有所有權的項目才是我們尋找的目標。譬如資產的轉移,學位的授予,資格的擁有,分數的評斷等。我們把這些值得妥善保管的標的先統稱為資產Assets

有了值得保存的目標後,通常他們的所有權會轉移。資產的轉移要經過交換的過程,看要一手交錢一手交貨,還是要先享受後付款。通常都是要拿等值的資產來交換,我們把這過程稱為交易(Transactions),而參與交易的人為參與者(Participants)

就好比一輛汽車,在今天由甲賣給乙N元。這其中Asset 是汽車,Participants 有甲和乙。而
在這 Transaction 裡記錄著:
  • 資產 = 汽車
  • 賣方 = 甲
  • 買方 = 乙
  • 總額 = N元
  • 日期 = 今天
這就是一筆交易紀錄。

用這個資產轉移交易模式,我們可以設想一些智慧政府中能應用區塊鏈的例子。如債券發行網路,基金結算網路,信用狀網路,房地交易網路,拍賣市場網路,貨品交易網路,寶石交易網路,身分資料展示網路,就診資料網路和汽車履歷網路等。在交易的內容上,除了做權利的轉移外,還可以做發行,廢止,開放或撤銷等不同動作。比如說證券,公司可以發行股票,交易所可以讓股票上市。投資人可以買賣股票,交易所可以讓股票下市,公司可將股票買回。各種不同交易都可以設計在Transactions裡設計。

而當發展智慧學校應用時,可以先構想一些可以轉移的資產,如學號,學分,學位。學校每年發行一定數量的學號,讓新生來取得。同時也發行不同學分讓學生來取得,同時記錄成績。最後累積一定學分後,就取得學位。之後這學號就註銷,不再作用,僅供查詢之用。

到這裡應該就能略略體會區塊鏈與一般資料庫不一樣的應用實現方式了。

[區塊鏈] 採用區塊鏈的業務實例


作者:夏肇毅 2018-10-16 初版


採用區塊鏈的業務實例

2018年3月,環球銀行金融電信協會SWIFT完成與34家銀行間,以分散式帳本提供國外同業帳戶(Nostro Accounts) 即時可見性的概念驗證PoC 。它以 Hyperledger Fabric 1.0製作,提供了即時事件處理,交易狀態更新,完整監督紀錄,預期與可用結餘的可見性,即時簡易帳戶輸入確認,標示未完成輸入與相關問題與產生資料支援監管報表等功能。在PoC時,有28家銀行實際在沙箱中建立了528個Channels來測試。日後若要在生產環境中運作,則需建立達100,000個以上的 Channels

國外一般在證券交易之後,紀錄就會傳送給清算單位。他們會比對買賣方紀錄,並確認雙方同意該條件。若有出入,清算單位會向交易單位報告以嘗試解決。清算流程結束後,就是結算。結算單位向買方收取現金,並向賣方收取證券。最後並交付證券給買方,以及現金給賣方。

歐洲央行在2016年提出了運用分散式帳本技術(DLTs)在證券交易後業務的分析報告。報告中提到證券交易後功能(post-trading functions) 包括:
保存帳戶(保管/登記),檢查投資人控制資產的權利(KYC了解客戶與AML反洗錢),交易結算前傳送及對帳(清算),幫助結算及對沖結算風險,直到資金與證券轉移結束(風險管理),執行參與交易者資金與證券轉移義務(結算),確認發行完善並避免未授權的的證券產生(公證),避免私人資訊被偷,惡意修改與阻斷服務(網路安全),以及管理發行者事件及對投資人的影響(資產服務)。

在歐洲央行報告中分析,如果利用分散式帳本技術,因為每一節點都保存一份資料,而使得資訊重複最大化。同時因為必須在多方中達成共識,所以比起集中式資料庫技術,這限制了它的結算的速度。但就算是使用現成的中央式資料庫技術,如果各單位的資料庫間缺乏互用性,依舊讓交易後流程緩慢。

2018年1月,IBM與全球最大貨櫃運輸公司馬士基航運公司宣布合資意願,將以區塊鏈技術來提供安全且有效率的貿易系統。原本的流程是由很多單位間,以點對點的方式溝通。新系統要將所有單位連在一起,做資訊整合。這中間所帶來的好處,與傳統的SOA(service-oriented architecture)解決方案類似,人為審批程序仍為效能最大障礙。只有做到end-to-end自動化的STP ( Straight-through processing ) 讓流程自動跑完,才有機會達到最大效益。


而Linux基金會自2016年開始經營Hyperledger開源專案社群,用來建立區塊鏈框架與平台。希望以區塊鏈技術建立分享帳簿資料庫( Shared Ledger Database ) 應用在金融,健康與供應鏈上。主要的框架專案有由Digital Asset, Blockstream IBM 所提供的 Hyperledger Fabric Intel 提供的 Hyperledger Sawtooth。育成中的開發工具有 HyperLedger Composer HyperLedger Explorer 等專案。

其中Hyperledger Composer是一個快速建立區塊鏈應用模型的工具。它讓使用者能很快地把使用情境中的業務邏輯建立使用範例,用來測試這解決方案的可行性與潛在問題。最後它會產生一個網頁服務器來和 Hyperledger Fabric 溝通,讓整個區塊鏈網路運作起來。 Hyperledger Fabric 是一個模組式框架,可加入共識及會員服務,並執行智能合約程式。

Hyperledger Composer的一般業務情境中,都會有供交易的資產 ( Assets ) 。這可能是貨物,財產或服務。然後還有讓資產轉換擁有者的交易(Transactions)過程,以及交易的參與者 ( Participants) 。舉例來說,在拍賣網站裡,Assets就是拍賣品,Participants 就是買家與賣家,而Transactions 就是成交紀錄。使用者就是利用這模式來建立區塊鏈應用。

[區塊鏈] 區塊鏈網路是什麼?


作者:夏肇毅 2018-10-11 初版


區塊鏈網路是什麼?

近年來金融科技風起雲湧,傳統金融業數位轉型蔚為風潮。金融科技依照世界經濟論壇(World Economic Forum, WEF) 的金融服務業未來報告書所描述,包括有支付、保險、存放款、資本募集、投資管理以及市場資訊供應六個主要方向。政府、學界及業界不斷舉辦競賽來蒐集應用場景,慢慢地這些應用都已為金融業者所採納實現,因而就漸漸移出創新應用的焦點。到最近兩三年,隨著以比特幣為首的加密貨幣與ICO興起,接著也帶動起另一股區塊鏈熱潮。

自2009年比特幣Bitcoin發行開始,加密貨幣Cryptocurrency就慢慢的發展起來。由2010年5月22日有人用1萬比特幣買到兩盒披薩起,逐漸加溫後爆熱。到2017年底達到歷史高點1比特幣近2萬美金,之後又曾崩跌七成。

比特幣使用的技術就是區塊鏈。所謂區塊鏈,就是把帳本資料紀錄在一塊塊的區塊中,然後再用特殊的方法將它連結成一個長長的鏈。在後面支撐這區塊鏈的,就是分散式帳本技術DLTs (Distributed Ledger Technologies)。有了區塊鏈後還要用Peer to Peer (P2P)網路把自己的帳本傳給他人分享。在裡面每個人都能修改帳本,但要聽誰的呢? 於是就發明了共識機制,在比特幣中用的是PoW(Proof of Work) 誰算得最快,做出最長的鏈,就聽他的,同時也給找出每個新區塊的人一定數量的比特幣做為獎勵。所以大家就投資硬體並結盟一起,搶當算力最高的人,以賺取比特幣酬勞。

在比特幣中定義,一個電子貨幣為一個簽章鏈。
某個電子貨幣的擁有者將它轉移給下一個擁有者時,會對前次交易與下個擁有者的公鑰做hash再加以數位簽章,並加到電子貨幣底端,收款人對這數位簽章驗章來驗證該鏈的所有權。這過程表示如下:

付款人(擁有i):
擁有者簽i = 簽章(
hash( 交i+公鑰(擁有i+1) ),
私鑰(擁i)
)

收款人(擁有i+1):
驗章(
擁有者簽i ,
公鑰(擁有i)
)

若要確認這個電子貨幣未被使用過,收款人就必須驗證過去的所有交易。有一種驗證方式是去建立驗證中心,讓它存著過去所有交易來確認某個電子貨幣是否被使用過。但為了達成去中心化目的,比特幣不用驗證中心的集中式驗證,而採用將所有交易紀錄傳給所有參與者自行驗證的方式。

比特幣在每個區塊內持續增加區塊中名為nonce的數值,直到這區塊的hash值是以一定數目的0起頭為止。這所需要的運算能力,與起頭為0的數目成指數級相關。因為這區塊的hash值會被帶到下一區塊,所以若有人想要竄改前面區塊的內容,則它必須花費大量計算能力來重新計算該點以後所有區塊的hash值。

因為是去中心化設計,最後要靠大家來決定要用誰計算出來的結果。其中的規則就是取用最長鍵,誰控制最多節點的算力,誰就能算出最長鍵。比特幣會控制系統讓當前算力在每10分鐘能產生一個區塊的程度。再加上傳輸驗證等因素,所以通常要六個循環,也就是一個鐘頭後才能確認交易已完成。

區塊鏈的另一個要角是乙太坊。它是個區塊鏈智能合約平台,應用程式在乙太坊虛擬機 EVM (Ethereum Virtual Machine) 中執行。乙太坊的區塊產生間隔降低到15秒左右,加上智能合約的出現,讓區塊鏈應用從單純的貨幣拓展到各行各業上。

比特幣中使用 UTXO ( Unspent Transaction Outputs ) Model,要把以前的交易加起來才知道各帳戶餘額。乙太坊所使用的 Account Model 就像銀行帳戶一樣,交易完會把帳戶餘額紀錄在區塊鏈當中,所以適合智能合約的發展。

比特幣是在公用網路上運作,所以需要用共識機制來確保不易被竄改,這種方式叫公有鏈 (Public blockchains)。相對有些完全在私人領域中運行的區塊鏈網路,就是私有鏈 (Private blockchain)。介於中間的就是聯盟鏈 (Consortium blockchains)。加入聯盟需申請,不對外開放,運作上有權限控管的機制。比特幣的PoW共識機制是最為人詬病的問題,因為它消耗了大量的能源。而性能問題又是公有鏈的共同弱點,比特幣最快每秒鐘只能處理7筆交易,乙太坊每秒20筆。而聯盟鏈性能較佳,可達每秒1000筆交易左右