1. 程式人生 > >【深度學習】深度學習入門:投身深度學習你需要哪些準備?

【深度學習】深度學習入門:投身深度學習你需要哪些準備?

我想回答一些我經常被問到的問題:我需要什麼樣的電腦來進行深度學習?為什麼fast.ai推薦Nvidia GPU?你為初學者推薦什麼深度學習庫?你如何把深度學習引入生產?我認為這些問題都屬於一個總的主題:你需要什麼(硬體、軟體、背景和資料)來進行深入學習? 這篇文章是針對那些新進入這個領域的,並且對入門感興趣的人。

你需要的硬體

我們感謝遊戲業

電子遊戲行業(收入方面)大於電影和音樂行業的總和。 在過去的20年裡,視訊遊戲產業推動了GPU(圖形處理單元)的巨大進步,其用於繪製圖形所需的矩陣數學。幸運的是,這些正是深度學習所需的計算型別。GPU技術的這些進步是為什麼現在的神經網路比幾十年前更強大的一個關鍵部分。在沒有GPU的情況下訓練深度學習模型在大多數情況下將會非常緩慢。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

並非所有的GPU都是一樣的

大多數深度學習從業者不是直接程式設計GPU; 我們使用處理這個問題的軟體庫(如PyTorch或TensorFlow)。但是,要有效使用這些庫,你需要訪問正確型別的GPU。在幾乎所有情況下,這意味著可以從Nvidia公司獲得GPU。

CUDA和OpenCL是GPU程式設計的兩種主要方式。CUDA是迄今為止最發達,擁有最廣泛的生態系統,也是深度學習庫最有力的支援。CUDA是由Nvidia建立的專有語言,因此它不能被其他公司的GPU使用。當fast.ai推薦使用Nvidia GPU時,我們並不是對Nvidia有特別的親近或信任,而是這是迄今為止深度學習的最佳選擇。

Nvidia在GPU市場佔據主導地位,其次是競爭對手AMD公司。 今年夏天,AMD宣佈釋出一個名為ROCm的平臺,為深度學習提供更多的支援。 PyTorch,TensorFlow,MxNet和CNTK等主要深度學習庫的ROCm狀態仍在開發中。雖然我希望看到一個開源的替代方案取得成功,但我不得不承認,我發現ROCm的文件很難理解。我剛剛閱讀了ROCm網站的Overview,Getting Started和Deep Learning頁面,但仍然不能用我自己的話來解釋ROCm,儘管我想在這裡把它包括在內以便完整。(我承認沒有硬體背景,但我認為像我這樣的資料科學家應該成為這個專案的目標受眾之一。)

如果你沒有GPU ...

如果你的電腦沒有GPU或者沒有Nvidia GPU,那麼你有幾個很好的選擇:

  • 使用Crestle,通過你的瀏覽器:Crestle是一項服務(由fast.ai學生Anurag Goel開發),為你提供在雲上的已經預先安裝並配置為在GPU上執行的所有流行的科學和深度學習框架的雲服務。它很容易通過你的瀏覽器訪問。新使用者可免費獲得10小時和1 GB的儲存空間。之後,GPU使用率是每小時59美分。我向那些剛接觸AWS或新手的人推薦使用這個選擇來使用控制檯。

  • 通過你的控制檯設定AWS雲實例:你可以按照這個fast.ai設定課程中的步驟建立一個AWS例項(遠端為你提供Nvidia GPU)。AWS每小時收取90美分。儘管我們的設定材料都是關於AWS(並且你會發現對AWS最多的論壇支援),但是一位fast.ai學生建立了一個設定Azure虛擬機器進行深度學習的指南。如果有人寫關於Google雲端引擎的部落格文章,我很樂意分享和新增一個連結。

  • 建立你自己的框架。這是我們的fast.ai論壇中的一個冗長的話題,在論壇里人們可以提出問題,分享他們正在使用的元件,併發布其他有用的連結和提示。最便宜的新型Nvidia GPU是300美元左右,一些學生在eBay或Craigslist上發現了更便宜的舊版GPU,而另外一些則是為了更強大的GPU支付更多的費用。我們幾個學生寫部落格文章記錄他們如何建立他們的機器:

  • 深度困惑:建立深度學習機的不幸事件(Mariya Yao)

  • 建立一個便捷的深度學習機器(Sravya Tirukkovalur)

  • 建立你自己的深度學習框(Brendan Fortuner)

你需要的軟體

深度學習是一個相對年輕的領域,庫和工具正在迅速改變。 例如,Theano,在2016年我們選擇使用在我們的課程的第1部分,它剛剛退休。目前我們正在使用的PyTorch僅在今年(2017年)釋出。 就像Jeremy之前寫的那樣,你應該假定你今天學到的任何特定的庫和軟體都會在一兩年內被淘汰。最重要的是理解底層概念,為此,我們在Pytorch上建立了自己的庫,我們相信深度學習概念更清晰,並將最佳實踐編碼為預設值。

Python是深度學習中最常用的語言。有許多深度學習庫可供選擇,幾乎所有主要科技公司都支援不同的庫,儘管這些公司的員工經常使用各種工具。深度學習庫包括TensorFlow(谷歌),PyTorch(Facebook),MxNet(華盛頓大學,由亞馬遜改編),CNTK(微軟),DeepLearning4j(Skymind),Caffe2(也是Facebook),Nnabla(索尼),PaddlePaddle(百度),以及Keras(在此列表中的其他幾個庫之上執行的高階API)。所有這些都有可用的Python選項。

動態與靜態圖計算

在fast.ai,我們優先考慮程式設計師可以進行實驗和迭代(通過更容易的除錯和更直觀的設計)比理論效能提速更重要的速度。這就是我們使用PyTorch的原因,PyTorch是一個具有動態計算功能的靈活的深度學習庫。

深度學習庫之間的一個區別是它們是使用動態還是靜態計算(一些庫,如MxNet和現在的TensorFlow,兩個都允許)。動態計算意味著程式按照你編寫的順序執行。這通常使得除錯更容易,並且更容易將你的想法轉換成程式碼。靜態計算意味著你預先為你的神經網路構建一個結構,然後對其執行操作。從理論上講,這允許編譯器進行更大的優化,儘管這也意味著在你的程式和編譯器執行的程式之間可能存在更多的斷開。這也意味著,錯誤可能會更多地從導致錯誤的程式碼中移除(例如,如果你在構建圖形時存在錯誤,那麼直到你稍後執行操作時,你才可能意識到)。儘管理論上有靜態計算圖的語言比具有動態計算的語言具有更好的效能,但我們常常發現,在實際中,這種情況並非如此。

谷歌的TensorFlow大多使用靜態計算圖,而Facebook的PyTorch使用動態計算。(注:TensorFlow在兩週前宣佈了一個動態計算選項Eager Execution,然而它還很早,大多數TensorFlow文件和專案都使用靜態選項)。今年9月,fast.ai宣佈,我們選擇了PyTorch而不是TensorFlow來在今年的課程中使用,並用於開發我們自己的庫(PyTorch的高階包裝器,用於編碼最佳實踐)。簡單地說,下面是我們選擇PyTorch的幾個原因(在這裡更詳細地解釋):

  • 更容易除錯

  • 動態計算更適合於自然語言處理

  • 傳統的面向物件的程式設計風格(這對我們來說更自然)

  • TensorFlow使用如範圍和會話等不尋常的約定可能會令人困惑,而且需要更多的學習

谷歌已經投入了比任何其他人更多的資源來營銷TensorFlow,我認為這是TensorFlow如此知名的原因之一(對於許多深度學習以外的人來說,TensorFlow是他們聽說過的唯一的DL框架)。 如上所述,TensorFlow幾周前釋出了一個動態計算選項,解決了上述一些問題。 許多人都在問fast.ai我們是否要切換回TensorFlow。動態選項還是相當新的,而且還不太成熟,所以我們現在會繼續使用PyTorch。 然而,TensorFlow團隊非常樂意接受我們的想法,我們很樂意看到我們的fastai庫被移植到TensorFlow。

注意:我們更新的課程的個人版本,其使用PyTorch以及我們自己的fastai庫,目前正在進行。課程結束後將免費線上釋出(預計釋出時間:1月)。

你生產所需要的東西:不是GPU

許多人把生產中深度學習的想法過於複雜,認為他們需要比他們實際做的更復雜的系統。你可以在生產中使用CPU和你選擇的網路伺服器進行深入學習,事實上,這是我們推薦的大多數使用情況。 這裡有幾個關鍵點:

  • 生產中進行訓練是非常罕見的。即使你想每天更新你的模型權重,你也不需要在生產中進行訓練。這意味著你只是在生產過程中進行推理(通過你的模型向前傳遞),比培訓更快更容易。

  • 你可以使用任何你喜歡的Web伺服器(例如Flask),並將其設定為簡單的API呼叫。

  • 如果你能夠有效地批量處理資料,GPU只會提供更快的速度。 即使你每秒獲得32個請求,使用GPU也可能會使你減慢速度,因為從第一次到達收集全部32個時,你必須等待一秒鐘,然後執行計算,然後返回結果。 我們建議在生產中使用CPU,並且可以根據需要新增更多的CPU(比使用多個GPU更容易)。

對於大公司來說,在生產中使用GPU可能是有意義的——然而,當你達到這個規模的時候,這將會是明確的。過早地嘗試在需要之前進行擴充套件只會增加不必要的複雜性,並會使你放慢速度。

你需要的背景:1年的編碼

激勵我和Jeremy為程式設計師建立用於編碼的實踐深度學習的一個挫折是,大多數深度學習材料分為兩類:

  • 如此膚淺和高水平,以至於不能提供實際在工作場所深度學習所需的資訊或技能,或創造出最先進的模型。如果你只是想要一個高層次的概述,這是好的,但如果你想成為一個有工作的從業者,那就太令人失望了。

  • 高度理論化並承擔研究生水平的數學背景。對於許多人來說,這是一個阻擋的障礙,即使是有數學博士學位的人,我也發現這個理論在學習如何編寫實用的解決方案方面並不是特別有用。許多材料都有這個傾向並不奇怪。直到最近,深度學習幾乎完全是一門學科,很大程度上是由在頂級學術刊物上發表的內容引發的。

我們免費的實踐深度學習課程的獨特之處在於,唯一的先決條件是1年的程式設計經驗,但它仍然教你如何創造最先進的模型。你的背景可以是任何語言,但在開始課程之前你可能需要學習一些Python,因為這是我們所使用的。我們根據需要介紹數學概念,我們不建議你嘗試提前學習數學理論。

如果你不知道如何編寫程式碼,我強烈建議學習,如果你對資料科學感興趣的話,Python是一個很好的語言。

你需要的資料:遠遠低於你的想象

雖然很多人聲稱你需要Google大小的資料集來深入學習,但這是錯誤的。遷移學習的力量(結合資料增強等技術)使得人們可以將預先訓練的模型應用於更小的資料集。 正如我們在別處談到的那樣,在醫療初創企業Enlitic,Jeremy Howard領導的一個團隊只使用了1000例肺癌CT掃描與癌症相比,建立了一個比一組4位專家放射科醫師更準確的診斷肺癌的演算法。C ++庫Dlib有一個例子,其中一個人臉檢測器只使用4個影象進行精確訓練,只包含18個人臉!

關於入門的說明

對於絕大多數與我交談的人來說,進入深度學習的門檻遠遠低於他們的預期,成本也在預算之內。但是,我意識到事實並非如此。我定期聯絡想要參加我們的線上課程,但無法承擔AWS成本的學生。不幸的是,我沒有辦法。同時還有其他的障礙。BrunoSánchez-Nuño撰寫了關於在沒有可靠網際網路接入的地方進行資料科學的挑戰,而且國際學者Tahsin Mayeesha在孟加拉國等國家描述了MOOC訪問的隱藏障礙。我關心這些入門的問題,然而這是無解的。

文章原標題《What you need to do deep learning》,作者:Rachel Thomas,譯者:董昭男,審校:李烽

CMU機器學習系主任:八個關鍵標準判別深度學習任務成功與否

來源: 人工智慧愛好者俱樂部 

640?wx_fmt=jpeg

目前,機器學習在醫療、金融、安防等領域應用廣泛,並替代了一些流程化低階勞動,因此有人認為未來人類的工作將被機器學習所取代,人們面臨失業的危險。

近日,《Science》發表了麻省理工學院數字經濟倡導行動主任Erik Brynjolfsson和卡內基梅隆大學電腦科學學院機器學習系主任Tom Mitchell的文章,他們從機器學習和經濟學角度分析了人類會不會“被失業”的問題。

引言:機器學習改變的太多了

在過去的幾十年裡,數字計算機已經改變了幾乎所有經濟領域的工作,現在的我們正處於一個更大、更快速變革的開端,這一切歸功於機器學習的最新進展,它有能力加快自動化的步伐。

對機器學習的進展至關重要的是改進演算法的組合,包括深度神經網路和相當快的計算機硬體。例如,Facebook基於短語的機器翻譯模型,每天有超過45億的語言翻譯。影象識別的演算法在ImageNet上造成了越來越低的錯誤率,使其從2010年的超過30%下降到今天的不到3%。同樣,自2016年7月以來,語音識別方面錯誤了從8.4%降低到4.9%。

然而,機器學習是一個“通用技術”,就像蒸汽機和電力一樣,它將產生大量的創新和功能。但對於具體的勞動力的影響和因此產生的更廣泛的經濟問題而言,我們還沒有深刻的認識。現實也並不像我們有時所宣稱的那樣,人們面對即將到來的“失業”問題。

儘管機器學習的進步能力讓人印象深刻,但它並不適用於所有任務,並且在在決策能力上也比人類弱的多。

八個關鍵標準來判別深度學習在任務中成功與否

1、能夠學習函式,將定義明確的輸入對映到明確輸出

其中包括分類(例如,根據癌症發生的可能性給狗狗的圖片做標記或標記醫療記錄)和預測(例如,分析貸款申請來預測未來違約的可能性)。儘管機器學習可能學會預測與給定輸入X相關的Y值,但這是一種學習的統計相關性,也許機器學習不會理解因果關係。

2、存在或者能夠建立含有輸入-輸出對的大資料集

訓練的例子越多,學習的準確度就越高。深度神經網路的顯著特徵之一是,它在許多領域的效能在一定數量的示例之後似乎並不具有漸近性。尤其重要的是,所有相關的輸入特性都要在訓練資料中獲取。儘管原則上任何任意的函式都可以用深度神經網路表示,但是計算機很容易模仿和延續訓練資料中存在的不需要的偏差,並忽略那些包含了它們不能觀察到的變數的規則。通過對現有流程和客戶互動進行監督,可以通過僱傭人員標記或建立全新的資料集,或者通過模擬相關的問題設定來建立數字資料。

3、能夠提供明確反饋,具有明確的目標和指標的任務

當我們能夠清晰地描述目標時,機器學習就能很好地工作,即使我們不能確定實現這些目標的最佳過程。儘管機器學習能模仿個體,但由於在獲取個體的輸入輸出決策能力上的缺失,因此它可能不會形成最佳的全系統效能。因此,為效能定義了系統範圍的度量標準,為深度學習系統提供了一個黃金標準。當訓練資料按照這樣的黃金標準進行標記時,深度學習尤其強大,從而定義了預期的目標。

4、擺脫對背景知識或常識的依賴,縮短甚至跳脫邏輯推理的長鏈

機器學習系統在學習資料中的經驗關聯方面非常強大,但是當任務需要依賴計算機未知的常識或背景知識的長推理鏈或複雜計劃時,它的效率較低。 一般來說,機器學習在視訊遊戲中表現不錯,這種遊戲需要快速反應,並提供即時反饋,但在遊戲中選擇最佳動作取決於記憶先前事件的時間以及關於世界的未知背景知識 (例如,知道房間裡新引入的物品可能在哪裡找到)。 例外的是,圍棋和象棋這樣的遊戲,因為這些非物理的遊戲可以以非常精確的速度快速模擬,所以可以自動收集數百萬個完全自我標記的訓練樣例。 但是,在大多數現實世界中,我們缺乏完美的模擬。

5、不需要詳細解釋決定是如何做出的

大型神經網路通過巧妙地調整數以億計的數字權重來學習做出決定,這些數字權重互連了他們的人造神經元。 解釋這種決定對人類的推理可能是困難的,因為深度神經網路通常不會使用與人類相同的中間抽象。 例如,雖然計算機可以診斷特定型別的癌症或肺炎,或者比專家醫生更好,但與人類醫生相比,他們解釋為什麼或如何提出診斷的能力較差。 

6、具有容錯性,不需要最佳解決方案,或者證明是正確的解決方案

幾乎所有的機器學習演算法都是從統計和概率上推匯出他們的解決方案。 因此,很難將其訓練到100%的準確度。 即使是最好的語音,物體識別和臨床診斷計算機系統也會犯錯(就像最好的人類一樣)。 因此,容忍學習系統的錯誤是制約採用的重要標準。

7、學會的現象或函式/功能不要隨時間發生快速的變化

一般來說,只有當未來測試例子的分佈類似於訓練樣例的分佈時,機器學習演算法才能很好地工作。 如果這些分佈隨著時間而改變,則通常需要再培訓,因此成功取決於相對於新培訓資料獲取率的變化率(例如,電子郵件垃圾郵件過濾器做得很好, 部分原因是與垃圾郵件發生變化的速度相比,新電子郵件的獲得率the rate of acquisition較高)。

8、沒有專門的靈巧性,身體技能或移動性要求

在處理非結構化環境和任務中的物理操作時,機器人與人類相比仍然笨拙。 這不是機器學習的缺點,而是機器人的一般物理機械操縱器的現有技術的結果。

六個非技術影響因素

除了上述標準外,還有許多非技術因素會影響到機器學習對勞動力的影響。 具體而言,機器學習對勞動力需求和工資的總體影響可以寫成六個不同經濟因素的函式:

1、勞力替代

2、價格彈性

3、互補性

4、收入彈性

5、勞動力供給彈性

6、業務流程重新設計

(經濟學內容在此不做詳細敘述)

最後,任何關於機器學習夠和不能做什麼,以及如何影響經濟的討論,都應該首先認識到兩個基本的考慮因素:1、我們仍非常遠離通用人工智慧,機器也不能做全方位的任務。2、儘管技術創新通常能夠影響和改善整體生活水平,但技術進步導致工資不平等表明,機器學習帶來的經濟效應可能具有極大的破壞性,既造造就了贏家,又造就了輸家。

這就要求決策者、商業領袖、技術人員和研究人員相當重視這些問題。

文章地址:

http://science.sciencemag.org/content/358/6370/1530

作者介紹:

640?wx_fmt=jpeg

Erik Brynjolfsson

麻省理工學院數字經濟倡導行動(the MIT Initiative on the Digital Economy)主任,斯隆學院教授。

640?wx_fmt=jpeg

Tom Mitchell

卡內基梅隆大學電腦科學學院機器學習系主任、教授,美國工程院院士,著有《機器學習》等。

深度學習基礎之LSTM

雲棲社群

序列預測問題曾經被認為是資料科學行業最難解決的問題之一。涉及序列問題的包括:預測銷售、發現股票市場走勢、瞭解電影情節、瞭解你的演講方式、語言翻譯、在iPhone鍵盤上預測下一個單詞等等。

隨著近年來資料科學的發展,人們發現所有的這些序列預測問題都可以被長短期記憶網路(LSTM)解決。

LSTM在許多方面比傳統的前饋神經網路和RNN都有優勢,本文的目的是解釋LSTM,並使你能夠將其用於解決現實生活中的問題。

注意:要閱讀本文,你必須具備神經網路的基本知識以及Keras是如何工作的。你可以參考這些文章來理解這些概念:

  • 從零開始理解神經網路

  • 深度學習基礎 - 迴圈神經網路簡介

  • 教程:使用Keras優化神經網路(帶影象識別案例研究)

目錄:

  1. 回顧神經網路(RNN)

  2. RNN的限制

  3. RNN改進:長期短期記憶(LSTM)

  4. LSTM的體系結構

    (1)Forget Gate

    (2)Input Gate

    (3)Out Gate

  5. 使用LSTM生成文字

1.回顧神經網路(RNN)

一個簡單的機器學習模型或一個人工神經網路可以學習基於許多特徵來預測股票價格。雖然股票的價格取決於很多因素,但它也很大取決於前幾天的股票價格。實際上對於交易者來說,前幾天(或趨勢)的這些價值是預測的一個主要決定因素,當然一些公司的重大事項影響是最大的。

在傳統的前饋神經網路中,所有的測試都被視為是獨立的,沒有前幾天考慮股票價格。這種時間依賴性是通過遞迴神經網路實現的。典型的RNN:

0?wx_fmt=jpeg

這樣看起來可能會有一些困惑,但一旦展開,看起來簡單得多:

0?wx_fmt=jpeg

RNN可以很大程度的解決我們序列處理的目的,但並不是完全的。比如,我們希望我們的電腦可以寫莎士比亞的十四行詩。RNN在短期時間內表現的非常棒,但要建立一個故事並記住它,如果要模型能夠理解和記憶序列背後的背景,就像人腦一樣,這對RNN來說是不可能的。

2. RNN的限制

當我們處理短期的依賴性時,遞迴神經網路(RNN)表現得很好。像這樣的問題:

0?wx_fmt=jpeg

這時RNNs變得相當有效,因為這個問題與上下文無關。RNN不需要記住之前所說的話或者說它的含義,它只需要知道在大多數情況下天空是藍色的。因此,預測將是:

0?wx_fmt=jpeg

然而,普通的RNNs並不能瞭解上下文在預測下一個輸出。之前很久以前出現的詞,現在做出預測的時候並不能發揮作用。比如這個例子:

0?wx_fmt=jpeg

在這裡,我們人可以理解,由於在西班牙工作了20年,他很可能掌握了西班牙語。但是,為了得到這個預測,RNN需要記住這個上下文。但是遺憾的是,這是RNN失敗的地方!

這裡面的原因就是梯度消失。為了理解這一點,你需要掌握前饋神經網路學習的一些知識。對於傳統的前饋神經網路,在特定層上應用的權重更新是學習率的倍數,來自前一層的誤差項以及該層的輸入。因此,特定圖層的誤差項可能是以前所有圖層誤差的積累。當處理像S形啟用函式時,隨著我們移向起始層,它的微分值(出現在誤差函式中)會倍增倍數。其結果是:隨著朝向起始層移動,梯度幾乎消失,難以訓練這些層。RNN只記得一小段時間的事情,也就是說,如果我們在一段時間之後需要這些資訊,它可能是可重複的,但是一旦大量的單詞被輸入,這些資訊就會在某處丟失。

3.對RNN的改進:LSTM(長短期記憶)網路

當我們安排日程時,我們優先考慮約會?如果我們需要為重要的事情騰出空間,我們知道哪個會議可以取消,以滿足其他會議的時間。

但RNN不這樣做。為了增添一個新的資訊,它通過一個函式轉換現有的資訊。但整個資訊總體上都是修改的,即沒有考慮“重要”資訊和“不那麼重要”的資訊。

LSTM通過乘法和加法對資訊進行小的修改,資訊流經稱為單元狀態的機制。這樣,LSTM可以選擇性地記住或忘記事物。特定單元狀態下的資訊有三種不同的依賴關係。

我們用一個特定股票的股價預測解釋它,今天的股價將取決於:

  1. 股票在前幾天走勢可能是下跌趨勢或上升趨勢。

  2. 前一天股票的價格,因為很多交易者在購買之前比較股票的前一天價格。

  3. 今天可能影響股票價格的因素。這可能是一個新的公司政策,正在被廣泛的批評或者公司的利潤下降或者是公司高層領導層的意外變化。

這些依賴關係可以概括為任何問題:

  1. 之前的單元狀態(即在前一時間步驟之後存在於儲存器中的資訊)。

  2. 前一個隱藏狀態(即與前一個單元格的輸出相同)。

  3. 當前時間步驟的輸入(即當時正在饋送的新資訊)。

4. LSTM的架構

我們可以通過模擬新聞頻道的團隊的運作情況,將LSTM的功能視覺化。一個新聞故事是圍繞許多人的事實、證據和陳述而建立的。比方說,我們假設謀殺是通過“毒害”受害人來完成的,但是剛剛出現的屍檢報告說死亡原因是“對頭部的影響”。作為這個新聞小組,你會做什麼?你馬上忘記以前的死亡原因和所有圍繞這個事實編織的故事。如果一個全新的嫌疑人被引入到圖片,一個曾經與受害者勾結,可能成為凶手的人。你一定會將這個資訊添到你的新聞源。

現在我們來詳細介紹一下LSTM網路的體系結構:

0?wx_fmt=jpeg

這與我們之前看到的簡化版本是完全不同的,典型的LSTM網路由稱為單元的不同儲存塊組成(我們在影象中看到的矩形)。記憶體塊負責記住事物,對這個記憶體的操縱是通過三個主要的機制來完成的,稱為門。

4.1: Forget Gate

我們假設一個LSTM被輸入下面的句子:

0?wx_fmt=jpeg

遇到“ person”之後的第一個句點,Forget Gate就意識到下一個句子中可能有語境的變化。因此,句子的主旨就被遺忘,空間被騰空。而當我們開始談論“ Dan” 這空間就被分配給了“ Dan”,這個忘記的過程是Forget Gate完成的。

0?wx_fmt=jpeg

Forget Gate負責從細胞單元中去除資訊。這些資訊是LSTM不再需要的或不太重要的資訊,可以通過濾波器的乘法來消除,這是優化LSTM網路效能所必需的。

這個門接受兩個輸入:h_t-1和x_t。

h_t-1是前一個單元的隱藏狀態或前一個單元的輸出,x_t是該特定時間步的輸入。給定的輸入乘以權重矩陣並新增偏差,之後,sigmoid函式被應用於這個值。sigmoid函式輸出一個向量,值範圍從0到1,對應於單元狀態中的每個數字。基本上,sigmoid函式負責決定要保留哪些值和丟棄哪些值。如果在單元狀態中為特定值輸出“0”,則意味著Forget Gate要完全忘記該資訊。類似地,“1”意味著Forget Gate要記住整個資訊。

4.2 Input Gate

讓我們再舉一個LSTM分析一個句子的例子:

0?wx_fmt=jpeg

現在這裡重要的資訊是“Bob”會游泳,他服役了四年的海軍。這可以新增到單元狀態,但是,他通過電話告訴我這一事實是一個不太重要的事情,可以忽略。新增一些新資訊的過程可以通過輸入門完成。

這是它的結構:

0?wx_fmt=jpeg

輸入門負責將資訊新增到單元狀態,這個資訊的新增基本上是從上圖看出的三步過程。

  1. 通過sigmoid函式來調節需要新增到單元狀態的值。這與Forget Gate基本上非常相似,並且充當來自h_t-1和x_t的所有資訊的過濾器。

  2. 建立一個向量,該向量包含所有可以新增的值(可以從h_t-1和x_t中感知)到單元狀態。這是使用tanh函式完成的,該函式輸出從-1到+1的值。

  3. 將過濾器(sigmoid gate)的值乘以建立的向量(tanh函式),然後通過加法操作將這些有用的資訊新增到單元狀態。

4.3 Out Gate

並非所有沿著單元狀態執行的資訊都適合在特定時間輸出。我們用一個例子來證實:

0?wx_fmt=jpeg

在這句話中,我們知道,“Brave”的當前輸入是用來形容名詞的形容詞。因此,無論如何,有一個很強的作為名詞的傾向。因此,Bob可能是一個合適的輸出。

從當前單元狀態中選擇有用資訊並將其顯示為輸出的工作是通過輸出門完成的。這是它的結構:

0?wx_fmt=jpeg

輸出門的功能可以再次分解為三個步驟:

  1. 在將tanh函式應用到單元狀態後建立一個向量,從而將值縮放到範圍-1到+1。

  2. 使用h_t-1和x_t的值建立一個過濾器,以便它可以調節需要從上面建立的向量中輸出的值。這個過濾器再次使用一個sigmoid函式。

  3. 將此調節過濾器的值乘以在步驟1中建立的向量,並將其作為輸出傳送出去,併發送到下一個單元格的隱藏狀態。

另外,濾波器需要建立在輸入和隱藏狀態值上,並應用於單元狀態向量。

5.使用LSTM生成文字

我們已經瞭解了關於LSTM足夠的理論概念。現在我們建立一個模型:可以預測Macbeth原始文字後的n個字元。大多數經典文字可以在這裡找到,txt檔案的更新版本可以在這裡找到。

我們將使用Keras,它可以在TensorFlow或Theano之上工作。因此,在深入研究這些程式碼之前,請確保你已經安裝了Keras 。

5.1:匯入依賴關係

# Importing dependencies numpy and kerasimport numpyfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import Dropoutfrom keras.layers import LSTMfrom keras.utils import np_utils

5.2:載入文字檔案並建立字元到整數對映

# load textfilename = "/macbeth.txt"text = (open(filename).read()).lower()# mapping characters with integersunique_chars = sorted(list(set(text)))char_to_int = {}int_to_char = {}for i, c in enumerate (unique_chars): char_to_int.update({c: i}) int_to_char.update({i: c})

文字檔案已開啟,所有字元都轉換為小寫字母。為了便於下面的步驟,我們將對映每個字元到相應的數字。這樣做是為了使LSTM的計算部分更容易。

5.3:準備資料集

# preparing input and output datasetX = []Y = []for i in range(0, len(text) - 50, 1): sequence = text[i:i + 50] label =text[i + 50] X.append([char_to_int[char] for char in sequence]) Y.append(char_to_int[label])

資料準備的格式是,如果我們想讓LSTM預測'HELLO'中的'O',我們會輸入['H','E','L','L']作為輸入,[' O']作為預期產出。同樣,我們在這裡修改我們想要的序列的長度(在這個例子中設定為50),然後儲存X中前49個字元的編碼和期望的輸出,即Y中的第50個字元。

5.4:重新塑造X

# reshaping, normalizing and one hot encodingX_modified = numpy.reshape(X, (len(X), 50, 1))X_modified = X_modified / float(len(unique_chars))Y_modified = np_utils.to_categorical(Y)

LSTM網路輸入的形式是[樣本,時間步驟,特徵],其中樣本是我們擁有的資料點的數量,時間步長是單個數據點中存在的與時間相關的步數,特徵指的是我們對於Y中相應的真值的變數數目。然後我們將X_modified中的值在0到1之間進行縮放,並且在Y_modified中對我們的真值進行熱編碼。

5.5:定義LSTM模型

# defining the LSTM modelmodel = Sequential()model.add(LSTM(300, input_shape=(X_modified.shape[1], X_modified.shape[2]), return_sequences=True))model.add(Dropout(0.2))model.add(LSTM(300))model.add(Dropout(0.2))model.add(Dense(Y_modified.shape[1], activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam')

使用一個線性堆疊的順序模型。第一層是具有300個儲存器單元的LSTM層,並且它返回序列。這樣做是為了確保下一個LSTM層接收序列,而不僅僅是隨機分散的資料。在每個LSTM層之後應用一個丟失層,以避免模型過度擬合。最後,我們將最後一層看作一個完全連線的圖層,其中' softmax'啟用和神經元等於唯一字元數,因為我們需要輸出一個熱編碼結果。

5.6:擬合模型和生成字元

# fitting the modelmodel.fit(X_modified, Y_modified, epochs=1, batch_size=30)# picking a random seedstart_index = numpy.random.randint(0, len(X)-1)new_string = X[start_index]# generating charactersfor i in range(50): x = numpy.reshape(new_string, (1, len(new_string), 1)) x = x / float(len(unique_chars))#predictingpred_index = numpy.argmax(model.predict(x, verbose=0))char_out = int_to_char[pred_index]seq_in = [int_to_char[value] for value in new_string]print(char_out)new_string.append(pred_index)new_string = new_string[1:len(new_string)]

該模型需要100訓練次數,批量大小為30。然後,我們修復隨機種子並開始生成字元。來自模型的預測給出預測字元的字元編碼,然後將其解碼回字符值並附加到該模式。

這是網路輸出的樣子:

0?wx_fmt=jpeg

6.結語

LSTM是序列和時間序列相關問題的一個非常有前途的解決方案。唯一的缺點就是訓練難度大,但這只是一個硬體限制。

 640?wx_fmt=png

人工智慧賽博物理作業系統

AI-CPS OS

人工智慧賽博物理作業系統新一代技術+商業作業系統“AI-CPS OS:雲端計算+大資料+物聯網+區塊鏈+人工智慧)分支用來的今天,企業領導者必須瞭解如何將“技術”全面滲入整個公司、產品等“商業”場景中,利用AI-CPS OS形成數字化+智慧化力量,實現行業的重新佈局、企業的重新構建和自我的煥然新生。

AI-CPS OS的真正價值並不來自構成技術或功能,而是要以一種傳遞獨特競爭優勢的方式將自動化+資訊化、智造+產品+服務資料+分析一體化,這種整合方式能夠釋放新的業務和運營模式。如果不能實現跨功能的更大規模融合,沒有顛覆現狀的意願,這些將不可能實現。

領導者無法依靠某種單一戰略方法來應對多維度的數字化變革。面對新一代技術+商業作業系統AI-CPS OS顛覆性的數字化+智慧化力量,領導者必須在行業、企業與個人這三個層面都保持領先地位:

  1. 重新行業佈局:你的世界觀要怎樣改變才算足夠?你必須對行業典範進行怎樣的反思?

  2. 重新構建企業:你的企業需要做出什麼樣的變化?你準備如何重新定義你的公司?

  3. 重新打造自己:你需要成為怎樣的人?要重塑自己並在數字化+智慧化時代保有領先地位,你必須如何去做?

AI-CPS OS是數字化智慧化創新平臺,設計思路是將大資料、物聯網、區塊鏈和人工智慧等無縫整合在雲端,可以幫助企業將創新成果融入自身業務體系,實現各個前沿技術在雲端的優勢協同。AI-CPS OS形成的字化+智慧化力量與行業、企業及個人三個層面的交叉,形成了領導力模式,使數字化融入到領導者所在企業與領導方式的核心位置:

  1. 精細種力量能夠使人在更加真實、細緻的層面觀察與感知現實世界和數字化世界正在發生的一切,進而理解和更加精細地進行產品個性化控制、微觀業務場景事件和結果控制。

  2. 智慧:模型隨著時間(資料)的變化而變化,整個系統就具備了智慧(自學習)的能力。

  3. 高效:企業需要建立實時或者準實時的資料採集傳輸、模型預測和響應決策能力,這樣智慧就從批量性、階段性的行為變成一個可以實時觸達的行為。

  4. 不確定性:數字化變更顛覆和改變了領導者曾經仰仗的思維方式、結構和實踐經驗,其結果就是形成了複合不確定性這種顛覆性力量。主要的不確定性蘊含於三個領域:技術、文化、制度。

  5. 邊界模糊:數字世界與現實世界的不斷融合成CPS不僅讓人們所知行業的核心產品、經濟學定理和可能性都產生了變化,還模糊了不同行業間的界限。這種效應正在向生態系統、企業、客戶、產品快速蔓延。

AI-CPS OS形成的數字化+智慧化力量通過三個方式激發經濟增長:

  1. 創造虛擬勞動力,承擔需要適應性和敏捷性的複雜任務,即“智慧自動化”,以區別於傳統的自動化解決方案;

  2. 對現有勞動力和實物資產進行有利的補充和提升,提高資本效率

  3. 人工智慧的普及,將推動多行業的相關創新,開闢嶄新的經濟增長空間

給決策制定者和商業領袖的建議:

  1. 超越自動化,開啟新創新模式:利用具有自主學習和自我控制能力的動態機器智慧,為企業創造新商機;

  2. 迎接新一代資訊科技,迎接人工智慧:無縫整合人類智慧與機器智慧,重新

    評估未來的知識和技能型別;

  3. 制定道德規範:切實為人工智慧生態系統制定道德準則,並在智慧機器的開

    發過程中確定更加明晰的標準和最佳實踐;

  4. 重視再分配效應:對人工智慧可能帶來的衝擊做好準備,制定戰略幫助面臨

    較高失業風險的人群;

  5. 開發數字化+智慧化企業所需新能力:員工團隊需要積極掌握判斷、溝通及想象力和創造力等人類所特有的重要能力。對於中國企業來說,創造兼具包容性和多樣性的文化也非常重要。

子曰:“君子和而不同,小人同而不和。”  《論語·子路》雲端計算、大資料、物聯網、區塊鏈和 人工智慧,像君子一般融合,一起體現科技就是生產力。

如果說上一次哥倫布地理大發現,拓展的是人類的物理空間。那麼這一次地理大發現,拓展的就是人們的數字空間。在數學空間,建立新的商業文明,從而發現新的創富模式,為人類社會帶來新的財富空間。雲端計算,大資料、物聯網和區塊鏈,是進入這個數字空間的船,而人工智慧就是那船上的帆,哥倫布之帆!

新一代技術+商業的人工智慧賽博物理作業系統AI-CPS OS作為新一輪產業變革的核心驅動力,將進一步釋放歷次科技革命和產業變革積蓄的巨大能量,並創造新的強大引擎。重構生產、分配、交換、消費等經濟活動各環節,形成從巨集觀到微觀各領域的智慧化新需求,催生新技術、新產品、新產業、新業態、新模式。引發經濟結構重大變革,深刻改變人類生產生活方式和思維模式,實現社會生產力的整體躍升。

產業智慧官  AI-CPS

用“人工智慧賽博物理作業系統新一代技術+商業作業系統“AI-CPS OS:雲端計算+大資料+物聯網+區塊鏈+人工智慧)在場景中構建狀態感知-實時分析-自主決策-精準執行-學習提升的認知計算和機器智慧;實現產業轉型升級、DT驅動業務、價值創新創造的產業互聯生態鏈


640?wx_fmt=png

相關推薦

深度學習深度學習入門投身深度學習需要哪些準備

我想回答一些我經常被問到的問題:我需要什麼樣的電腦來進行深度學習?為什麼fast.ai推薦Nvi

機器學習超詳細!上線一個機器學習專案需要哪些準備

Canvas是用於設計和記錄機器學習系統的模板。它比簡單的文字文件具有優勢,因為Canvas用簡

線上直播揭祕機器視覺中的深度學習

講師:曲曉峰   講師簡介: 曲曉峰,清華大學深圳研究生在站博士後。香港理工大學-電子計算學系-人體生物特徵識別研究中心哲學博士。碩士畢業於瀋陽工業大學-視覺檢測技術研究所(德州儀器TIDSP聯合實驗室)、檢測技術與自動化裝置專業。 研究方向:人體生物特徵識別、深度學習、機器視覺。從事影

電腦科學2018.02含原始碼一種目標分類的深度學習預測模型

本文為荷蘭代爾夫特理工大學(作者:N.E. Sahla)的碩士論文,共58頁。 在過去的十年,全球倉儲自動化市場迅速而顯著地增長。最大的挑戰在於識別和處理不同的物件。本研究旨在探討物件特徵,例如大小或形狀與條形碼位置之間是否存在可用的關係,從而穩健地辨識儲存箱中的物件。在MATLA

備忘python神經網路演算法與深度學習視訊

先準備好一個大硬碟,照著這個學習路線學習!站長也在學習這個教程,沿著數學->演算法->機器學習->資料探勘(分析)->人工智慧的學習路線學習。 第00_安裝包、開發工具、註冊(贈品) 第01階段-基礎必備篇    python3.6視訊零基礎2周快速

深度學習圖網路——悄然興起的深度學習新浪潮

【深度學習】圖網路——悄然興起的深度學習新浪潮     https://mp.weixin.qq.com/s/mOZDN9u7YCdtYs6DbUml0Q     現實世界中的大量問題都可以抽象成圖模型(Graph Model),

深度強化學習入門用TensorFlow構建的第一個遊戲AI

本文通過一種簡單的 Catch 遊戲介紹了深度強化學習的基本原理,並給出了完整的以 Keras 為前端的 TensorFlow 程式碼實現,是入門深度強化學習的不錯選擇。 去年,DeepMind 的 AlphaGo 以 4-1 的比分打敗了世界圍棋冠軍李世乭。超過 2 億的觀眾就這樣看著強化學習(r

總結整理javascript基礎入門學習(慕課網學習

節點 confirm pro remove prompt 例如 ref 存儲 基礎入門 https://www.imooc.com/learn/36 註意: javascript作為一種腳本語言可以放在html頁面中任何位置,但是瀏覽器解釋html時是按先後順序的,所以前面

機器學習Python 快速入門筆記

python 筆記 基礎 Python 快速入門筆記Xu An 2018-3-7 1、Python print#在Python3.X中使用print()進行輸出,而2.x中使用()會報錯 print("hello world") print('I\'m a

機器學習Matplotlib 快速入門筆記

MatpoltlibMatplotlib 快速入門筆記Xu An 2018-4-7import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D1、基本圖形繪制x=np.linspace(

SVG學習SVG 影象入門教程

一、概述 SVG 是一種基於 XML 語法的影象格式,全稱是可縮放向量圖(Scalable Vector Graphics)。其他影象格式都是基於畫素處理的,SVG 則是屬於對影象的形狀描述,所以它本質上是文字檔案,體積較小,且不管放大多少倍都不會失真。 SVG 檔案可以直接插入網頁,

機器學習系列文章第1部分為什麼機器學習很重要 ?

目錄 路線圖 關於作者 簡單,簡單的解釋,附有數學,程式碼和現實世界的例子。 這個系列是一本完整的電子書!在這裡下載。免費下載,貢獻讚賞(paypal.me/ml4h) 路線圖 第1部分:為什麼機器學習很重要。人工智慧和機器學習的大

我的javaEE學習JDBC簡單入門

一、JDBC簡介 1、JDBC是SUN公司為了簡化操作資料推出一套規範。資料庫廠商的驅動就是對JDBC的實現。 2、Java Data Base Connectivity(java資料庫連線),它主要由介面組成。 java.sql.*    javax.sql.*   

機器學習(5)貝葉斯決策定理

      其中,P(C|x)表示觀測到資料x時事件C發生的條件概率,我們稱為後驗概率(posterior probability);P(C)=P(C=1)是事件C=1發生時的概率,稱為先驗概率(prior probabilty),因為這是在觀察到資料x之前就已經得到的關於C的知識;P(x|C)稱為類似然,與

機器學習迴歸案例實踐資料處理建模調參

# -*- coding: utf-8 -*- """迴歸問題案例.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google

Effective java 學習第三章對於所有物件都通用的方法

第八條:覆蓋equals是請遵守通用約定 滿足下列四個條件之一,就不需要覆蓋equals方法: 類的每個例項本質上都已唯一的。不包括代表值的類,如:Integer,String等,Object提供的equals方法就夠用了 不關心是否提供了“邏輯相等”的測試功能。對

機器學習聚類演算法層次聚類

本文是“漫談 Clustering 系列”中的第 8 篇,參見本系列的其他文章。 系列不小心又拖了好久,其實正兒八經的 blog 也好久沒有寫了,因為比較忙嘛,不過覺得 Hierarchical Clustering 這個話題我能說的東西應該不多,所以還是先寫了吧(我準

Python GuiTkinter 的入門學習

一、前面的話 Python 提供了多個圖形開發介面的庫,幾個常用 Python GUI 庫如下: Tkinter: Tkinter 模組(Tk 介面)是 Python 的標準 Tk GUI 工具包的介面 .Tk 和 Tkinter 可以在大多數的 Unix 平臺下使用

機器學習關於t-sne降維、視覺化

關於t-sne:降維、視覺化 機器學習中,我們的使用的資料基本都是高維的,所以我們很難直接從資料中觀察分佈和特徵。因此出現了很多資料降維的手段幫助我們提取特徵和視覺化資料。這就是流行學習方法(Manifold Learning):假設資料是均勻取樣於一個高維歐

機器學習聚類演算法層次聚類、K-means聚類

     所謂聚類,就是將相似的事物聚集在一 起,而將不相似的事物劃分到不同的類別的過程,是資料分析之中十分重要的一種手段。比如古典生物學之中,人們通過物種的形貌特徵將其分門別類,可以說就是 一種樸素的人工聚類。如此,我們就可以將世界上紛繁複雜的資訊,簡化為少數方便人們理解的類別,可以說是人類認知這個