㈠ 大家誰有好一點的電子論文網站,我的畢業設計是基於FPGA的數控振盪器(NCO)的ip core的研究,請大家幫幫忙
1、 基於FPGA的數字通信系統
摘 要本設計實現多路數據時分復用和解復用系統。設計分為發端和收端,以FPGA作為主控核心。發端系統有三路並行數據輸入:A/D轉換數據,撥碼開關1路和撥碼開關2路。這三路數據在FPGA的控制下作為串列...
類別:畢業論文 大小:345 KB 日期:2008-05-03
2、 基於FPGA和鎖相環4046實現波形發生器
摘 要本設計採用FPGA和鎖相環4046實現波形發生器。系統由波形產生模塊和可調頻率的時鍾產生模塊,數模轉換模塊和顯示模塊四部分組成。波形產生模塊完成三種波形的產生,並根據控制信號完成選定波形的輸出...
類別:畢業論文 大小:434 KB 日期:2008-05-03
3、 UC/OSII在FPGA上的移植
摘要嵌入式系統是當今非常熱門的研究領域,早期多以單片機為核心,應用領域非常廣泛.但單片機系統功能比較簡單,速度較慢,難以適應現代技術的快速發展.隨著現場可編程邏輯陣列(FPGA)技術的日益成熟,基於片...
類別:畢業論文 大小:2.92 MB 日期:2008-05-03
4、 基於FPGA的IIR濾波器設計
摘 要:數字信號處理在科學和工程技術許多領域中得到廣泛的應用,與FIR數字濾波器相比,IIR數字濾波器可以用較低的階數獲得較高的選擇性,故本課題採用一種基於FPGA的IIR數字濾波器的設計方案,首先...
類別:畢業論文 大小:461 KB 日期:2008-05-02
5、 基於FPGA的TD-SCDMA信道編解碼技術研究與實現(碩士)
摘 要作為數字通信系統中一個重要組成部分,信道編碼技術為保證通信的可靠性發揮著重要作用,廣泛應用於數字通信的抗干擾和差錯控制之中。 以TD-SCDMA為例子的第三代移動通信標准來說,其採用了3種信道...
類別:畢業論文 大小:359 KB 日期:2008-04-17
6、 基於ARM和FPGA的數控系統的硬體設計(碩士)
目 錄第一章 緒 論 51.1引言 51.2研究背景及國內外發展現狀 61.2.1研究背景 61.2.2國外發展狀況 71.2.3國內研究現狀 71.3本論文課題來源和研究內容 81.3.1課題來...
類別:畢業論文 大小:575 KB 日期:2008-04-15
7、 基於FPGA的JPEG壓縮編碼的研究與實現(碩士)
摘 要隨著信息技術和計算機技術的飛速發展,數字信號處理己經逐漸發展成一門關鍵的技術科學。圖像處理作為一種重要的現代技術,已經在通信、航空航天、遙感遙測、生物醫學、軍事、信息安全等領域得到廣泛的應用。...
類別:畢業論文 大小:2.28 MB 日期:2008-03-23
8、 OFDM通信系統基帶數據處理部分的FPGA實現
中文摘要正交頻分復用(OFDM,Orthogonal Frequency Division Multiplexing)是當前一種非常熱門的通信技術。它即可以被看作是一種調制技術,也可以被看作是一種復用...
類別:畢業論文 大小:1.48 MB 日期:2008-03-08
9、 FPGA應用實驗板設計
2007-09-24 19:58 207,360 FPGA體系的低功耗高層次綜合.doc2007-09-24 19:17 1,214,976 FPGA應用實驗板...
類別:畢業論文 大小:1.21 MB 日期:2007-09-25
10、 UWB-OFDM解調器的模擬及FPGA在線模擬實現
摘 要隨著無線通信技術的飛速發展,人們對於數據傳輸速率和服務質量(QoS)提出了更高的要求,尤其是對於那些針對短距離通信的應用來說更是如此。超寬頻無線通信技術(UWB)因為其自身具有的高傳輸速率、低...
類別:畢業論文 大小:1.71 MB 日期:2007-09-23
11、 高速VITERBI解碼器在ALTERA FPGA中的設計與實現
摘 要 本文以CDMA數字移動通信中的差錯控制問題為背景,用Altera公司的現場可編程門陣列(FPGA)器件(APEX20K200)設計實現了一種約束長度N=7的維特比(Viterbi)解碼的...
類別:畢業論文 大小:534 KB 日期:2007-09-06
12、 基於FPGA溫、濕度感測器系統設計
摘要 本系統採用FPGA晶元為主處理核心,從機採用FPGA晶元,負責數據檢測,檢測點的溫度和濕度經過溫、濕度感測器轉換為數字信號,將數字量送入從機,再經從機的數據處理,定時通過無線方式傳送給PC主...
類別:畢業論文 大小:1.1 MB 日期:2007-08-13
13、 基於FPGA的嵌入式系統開發板
摘 要本文設計完成的是基於FPGA的嵌入式系統開發板,它可以完成FPGA、嵌入式系統和SOPC等的設計和開發。開發板以Altera公司的Cyclone系列FPGA—EP1C6為核心,在其外圍擴展FL...
類別:畢業論文 大小:1.07 MB 日期:2007-07-21
14、 衛星信道延時模擬器的FPGA實現
摘要:在當前通信領域中衛星通信系統已經成為現代化通信強有力的手段之一。衛星信道組網具有下面一些優點:通信范圍大,只要衛星發射的波束覆蓋進行的范圍均可進行通信;不易受陸地災害影響;建設速度快;易於實現廣...
類別:畢業論文 大小:546 KB 日期:2007-07-02
15、 基於Altera FPGA的發動機ECU原型設計
摘要本文以直列4缸汽油發動機為背景,進行了汽車發動機感測器和控制器信號調理的嘗試,採用以自頂向下為核心的現代數字系統設計方法,藉助EDA開發平台和EDA實驗台,完成基於Altera FPGA的發動機E...
類別:畢業論文 大小:1.24 MB 日期:2007-06-21
16、 基於FPGA設計電梯控制系統
摘 要隨著科學技術的發展,近年來,我國的電梯生產技術得到了迅速發展.一些電梯廠也在不斷改進設計、修改工藝。而基於現場可編程邏輯門陣列(FPGA)來實現的電梯控制系統由於運行可靠性高,使用維修方便,抗干...
類別:畢業論文 大小:766 KB 日期:2007-06-12
17、 FPGA在機卡分離式高清數字一體電視機里的應用
摘要高清數字電視(HDTV)是繼黑白模擬電視,彩色模擬電視之後的第三代電視。隨著數字高清電視在全球發展日夜加速,美國、歐洲和日本等國家推進數字電視的速度和力度都在不斷加大,我國也在數字電視方面也加快了...
類別:畢業論文 大小:483 KB 日期:2007-03-14
18、 PSK調制演算法模擬與FPGA實現
摘要 隨著時代的發展,通信工程領域越來越多的應用集成晶元完成系統功能,它有著體積小,功能強大,開發周期短,便於實現等特點被業內工程師廣泛認可。其中在集成晶元領域,最有突破性和創新性的就是FPGA(Fi...
類別:畢業設計 大小:1.91 MB 日期:2007-02-01
19、 基於FPGA的數字復接系統幀同步器的設計
目 錄摘要Abstract1 緒論………… 11.1數字復接技術的發展………………………………11.2復接技術的研究現狀………………………………32 數字通信及復接原理……………………………… 5...
類別:畢業設計 大小:432 KB 日期:2007-01-20
㈡ 可以利用FPGA中的鎖相環實現FM解調嗎
那個提示根本不是說clk已經使用了,而是說clk的引腳不是時鍾引腳。
㈢ 怎樣用FPGA實現FSK調制解調
FSK(Frequeney-Shift Keying,頻移鍵控)是用不同頻率的載波來傳送數字信號。FSK信號具有抗干擾能力強、傳輸距離遠等優點,在只常生活和工業控制中被廣泛採用。例如CID(Calling Identity Delivery)來電顯示,低速的Modem,鐵路系統和電力系統的載波通信中也廣泛使用他來傳送各種控制信息。以往的FSK數據機採用「集成電路+連線」方式設計,集成塊多、連線復雜且體積較大。本文基於FPGA晶元,採用VHDL語言,利用層次化、模塊化設計方法,提出了一種FSK數據機的實現方法。
1 系統整體結構框圖
本文設計的FSK數據機採用了ALTERA公司的EP1C3T144C8晶元,系統主時鍾頻率為20 MHz(晶元外部有源晶振),「0」,「1」數字信號由偽隨機信號(m序列)發生器產生。為完成FSK調制器和解調器的發送與接收,由FPGA晶元完成的系統整體邏輯功能框圖如圖1所示。
2 系統的具體設計與實現
2.1 偽隨機序列的產生
最大長度線性移位寄存器序列(m序列)是數字通信中非常重要的、應用十分廣泛的一種偽隨機序列。由於他具有隨機性、規律性及較好的自相關性和互相關性,而且要求設備簡單,易於實現,成本低的特點,本系統採用m序列作為數字基帶信號進行程序調試。
m序列是由帶線性反饋的移位寄存器產生的周期最長的一種二進制序列。線性反饋移位寄存器的一般結構如圖2所示。他是由n級移位寄存器,若干模二加法器組成線性反饋邏輯網路和時鍾脈沖產生器連接而成。
由於帶有反饋,因此在移位脈沖作用下,移位寄存器各級的狀態將不斷變化,通常將移位寄存器的最後一級作為輸出,由此所產生的輸出序列為:{ak}=a0a1…ak-1。
輸出序列是一個周期序列,其特性由移位寄存器的級數、初始狀態、反饋邏輯及時鍾頻率(決定著輸出碼元的寬度)所決定。
當移位奇存器的級數及時鍾一定時,輸出序列就由移位寄存器的初始狀態及反饋邏輯完全確定;當初始狀態為全零狀態時,移位寄存器輸出全0列。因此初始狀態不能為全零狀態。
本系統選用m序列的級數為n=7,序列長度為m=27-1=127,若選用的反饋系數的八進制數值為235,轉換成二進制數值為10011101,即c0=c2=c3=c4=c7=1,c1=c5=c6=0。模擬波形如圖3所示。
2.2 FSK調制
本系統是利用2個獨立的分頻器來改變輸出載波頻率,以數字鍵控法來實現FSK捌制。
數字鍵控法也稱為頻率選擇法,他有2個獨立的振盪器,數字基帶信號控制轉換開關,選擇不同頻率的高頻振盪信號實現FSK調制。鍵控法產生的FSK信號頻率穩定度可以做到很高並且沒有過渡頻率,他的轉換速度快,波形好,頻率鍵控法在轉換開天發生轉換的瞬剛,2個高頻振盪的輸出電壓通常不相等,於是已調信號在基帶信息變換時電壓會發生跳變,這種現象稱為相位不連續,這是頻率鍵控特有的情況。
本文設計的FSK調制系統方框圖如圖4所示。
2.3 FSK解調
過零檢測法與其他解調方法相比較,最明顯的特點就是結構簡單,易於實現,對增益起伏不敏感,特別適用於數字化實現。他是一種經濟、實用的最佳數字解調方法。其方框圖如圖5所示。他利用信號波形在單位時間內與零電平軸交義的次數來測定信號頻率。輸入的已調信號經限幅放大後成為矩形脈沖波,再經微分電路得到l圾向尖脈沖,然後整流得到單向尖脈沖,每個尖脈沖表示信號的一個過零點,尖脈沖的重復頻率就是信號頻率的2倍。將尖脈沖去觸發一單穩態電路,產生一定寬度的矩形脈沖序列,該序列的平均分量與脈沖重復頻率成正比,即與輸入頻率信號成正比。所以經過低通濾波器輸出平均量的變化反映了輸入信號的變化,這樣就完成了頻率-幅度變換,把碼元「1」與「0」在幅度上區分開來,恢復出數字基帶信號。
本文設計的FSK解調方框圖如圖6所示。
3 系統模擬與實驗結果分析
整個設計使用VHDL編寫,以EP1C3T144CS為下載的目標晶元,在Quartus II軟體平台上進行布局布線後進行波形模擬,可得到如圖7所示的波形圖。其中:clk為輸入主時鍾信號;en為置位信號;clks為clk經過200分頻器的輸出信號;ps7為時鍾源經過n=7的偽隨機發生器產生的偽隨機(m序列)信號;fsk為ps7經過FSK調制器後的已調信號;q為fsk經過FSK解調器後的解調信號。
在實際硬體電路上進行測試,用示波器觀察各個模塊的工作過程,得到如圖8和圖9所示的波形圖。
其中,圈8中Ch1為已調信號,Ch2為數字基帶信號。圖9中Ch1為數字基帶信號,Ch2為解調信號。
由上面的軟體和硬體的測試結果可知:
(1)本系統的FSK數據機功能已經實觀,結果正確無誤,經驗證滿足預期的設計指標要求,且其整個工作過程可通過軟體波形模擬,或是實際硬體電路通過示波器來直觀、清晰觀察。
(2)傳統的調制解調方式可以採用軟體與硬體結合的方式來實現,符合未來通信技術發展的方向。
4 結 語
傳統的FSK調制解調方式都是採用硬體電路實現,電路復雜、調試不便。文中採用硬體描述語占設計的基於FPGA數據機,設計靈活、修改方便,有效地縮小了系統的體積,增加了可靠性,同時系統採用VHDL語言進行設計,具有良好的可移植性及產品升級的系統性。
㈣ 以後想找fpga的相關工作,面試應該准備什麼,請問有這方面的參考書籍嗎
面試流程一般分以下幾個階段:僅供參考
一、面試前的准備:
面試前要先預想主考官會問的問題,並准備謹慎而有條理地回答。事先有準備的人,表情和肢體語言比較篤定從容,且具備較好的回應能力。大學畢業生由於缺乏面試經驗,可事先找朋友練習面試技巧。面試時最好提前10分鍾到達地點,先去洗手間放鬆一下,整理一下思路,還可最後檢查一下自己的儀容,整理因擠公車而弄亂的發型,女士還可趁機補補妝。
二、面試時的禮儀:
面試務必要准時,一進公司就是面試的開始,對人要客氣有禮,秘書或接待人員都可能影響到你是否能得到這份工作。面試前應關掉手機,若當著主考官的面關掉,更可顯出你的誠懇。注意自己坐姿,節制不該有的小動作。與主考官保持視線的接觸,但不要緊盯著對方的眼睛,眼神切勿亂瞟亂看。
三、面試時的應對:
仔細聆聽對方的問題,審慎回答,不要太簡略,切忌只回答"是的"、"好"、"對的"、"沒問題"等無法使內容更生動的字句,要完整並舉實例說明,但要避免冗長。
若對應征公司不了解,不妨坦誠相告,以免說錯而得不償失。
當對方問你"你能為公司做什麼時",若無法馬上回答,可先請問對方這份工作上最重要的內容是什麼,你好就這些部分來回答。
當方問及你的專長時,別忘了針對專業特性來回答。對自己的能力和專長不需刻意強調,但也不必大過謙讓。
主考提及你是否有問題時,一定要把握機會發問,以表現自己對這份工作的強烈興趣,但要就工作內容、人事規章等范圍發問,不要離題太遠
四、面試結束後:
無論告辭時說些什麼,要表現出信心堅定,給主試者一個深刻的印象。離開前應謝謝主試者給你面談的機會。若面試時間較長,在面試結束時,可以贊揚主試者在面試過程中使你獲益的特殊觀點,還可寄封一封感謝信,以加深對你的印象。
㈤ 有什麼適合大學本科生做的FPGA項目啊
直流電機伺服控制系統
1、 任務
使用FPGA為核心器件設計並製作一個直流電機伺服控制系統。
2、 要求
1. 基本要求:
(1)實現PWM邏輯和橋式驅動電路以驅動小型直流電機(5W以下),可開環控制其轉速變化;
(2)實現測速電路和邏輯,可採用光電方式,能夠測量並顯示電機的實時轉速;
(3)實現PID反饋控制演算法連接測速邏輯和PWM驅動邏輯,實現對電機空載轉速的直接精確控制,轉速控制范圍600rpm~2400rpm,控制誤差小於5%,轉速跟蹤時間小於5s。
2. 發揮部分
(1)降低轉速跟蹤時間至2s以下;
(2)降低控制誤差小於2%;
(3)允許輕載(小於電機堵轉扭矩的20%)。
4、 說明
1. 此題側重電賽控制和電力電子方向,建議參加電賽控制或電力方向的隊伍或與參加電賽控制或電力方向的同學組隊選做此題
2. PWM邏輯和測速邏輯建議使用Verilog編寫,PID演算法可用Verilog實現也可在Nios2內軟體實現;
3. 橋式驅動電路可採用單晶元方案,參考ST公司L62XX系列。
音樂播放器
一、任務
使用FPGA為核心器件設計並製作一個音樂播放器,能夠播放存儲在SD卡中的音樂文件。
二、要求
1. 基本要求:
(1)設計音頻DAC電路和音頻放大電路,可採用單晶元方案;
(2)能夠播放44.1KHz采樣率16位的音頻文件,音質良好。
(3)能夠播放多個音頻文件,並可切換曲目;
(4)實現快進、快退功能;
2. 發揮部分
(1)能夠播放壓縮格式的音頻文件,如ADPCM格式甚至MP3格式;
(2)實現同步顯示歌詞的功能。
(3)五段式頻譜顯示。
軟體無線電數據收發系統
1、 任務
使用FPGA為核心器件,實現一套軟體無線電數據收發系統。
2、 要求
1. 基本要求
1) 數據發送端採用DDS為信號源,做FSK、ASK或PSK調制(任選一種),並使用DAC輸出信號至天線,基帶數據採用曼徹斯特編碼;
2) 數據接收端採用ADC做直接載頻采樣或直接中頻采樣(IF Sampling),在FPGA內做解調(解調方式不限),基帶解碼並得到數據;
3) 載頻自定,佔用帶寬盡量小,可使用理想信道(直接導線連接)傳輸載波,並使得數據傳輸率大於1Kbit/s;
4) 發送端通過8個撥動開關定義發送序列,在接收端以LED顯示其狀態;
2. 擴展要求
1) 採用無線信道,天線形式任意,傳輸距離大於0.5m;
2) 提高數據傳輸率至50Kbit/s。
4、 說明
1. 此題側重電賽高頻方向,建議參加電賽高頻方向的隊伍或與參加電賽高頻方向的同學組隊選做此題
2. 測試時,將主要採用SignalTap觀察編碼、調制的情況。
3. 需要了解和學習的知識:
a) 關於數字信號采樣的奈奎斯特定律
b) 關於通信的調制、解調、基帶編碼、符號同步、幀同步等
c) 關於軟體無線電的載頻采樣、中頻采樣、相干解調等
請參考相關書籍。
4. 可採用一片DE0開發板同時做收發
5. 此題方案可深可淺,由於信道理想,請大家不要拘泥於通信原理或軟體無線電相關書籍上講述的經典、繁復的方案,應根據具體情況盡量簡化解調、解碼方法
簡易數字存儲示波器
一、任務
使用FPGA為核心器件設計並製作一台用於顯示被測波形的簡易數字存儲示波器.
二、要求
1、基本要求
1) 要求儀器具有觸發存儲顯示功能,儀器在滿足觸發條件時,能對被測信號採集與存儲,然後使用LCD顯示,或者通過串口或JTAG口發送數據至PC端顯示;
2) 要求儀器的輸入阻抗大於1MΩ;
3) 顯示縱向(電壓)分為10格(div),每格10個采樣點,縱向解析度三檔可調:±0.1V/div、±0.2V/div、±0.5V/div。
4) 顯示橫向(時間)分為10格(div),每格10個采樣點,橫向解析度六檔可調:1μs/div、2.5μs/div、5μs/div、10μs/div、25μs/div、50μs/div;
5) 最大輸入信號帶寬達到1MHz;
6) 包含上升沿觸發和下降沿觸發兩種觸發方式,觸發電平可調;
7) 存儲深度:每次觸發存儲一屏(100樣點);
8) 實現連續采樣,每秒兩次觸發采樣,即屏幕刷新率2屏/s,沒有觸發條件時,間隔0.5秒采一屏;
9) 觀測波形無明顯失真。
2、發揮部分
1) 增加單次采樣和暫停功能;
2) 提高屏幕刷新率至5屏/s;
3) 擴展存儲深度,在單次采樣結束和暫停時,具有波形縮放和水平移動功能;
4) 顯示信號峰峰值、有效值、平均值和頻率;
5) 增加游標功能,兩個游標,可移動並動態顯示兩個游標處的時間、電壓和游標間的時間差;
6) 提高采樣率、提高橫向解析度並提高輸入帶寬。
四、說明
這個題目對器件要求比較高,偏重電賽測量方向,建議參加電賽測量方向的隊伍或與參加電賽測量方向的同學組隊選做此題,題目中需要采樣率10Msps的AD轉換器,請大家查找ADI或TI公司的相關晶元自行申請。
㈥ 為什麼基於FPGA的fsk解調模擬波形y出不來
FSK(Frequeney-Shift Keying,頻移鍵控)是用不同頻率的載波來傳送數字信號。FSK信號具有抗干擾能力強、傳輸距離遠等優點,在只常生活和工業控制中被廣泛採用。例如CID(Calling Identity Delivery)來電顯示,低速的Modem,鐵路系統和電力系統的載波通信中也廣泛使用他來傳送各種控制信息。以往的FSK數據機採用「集成電路+連線」方式設計,集成塊多、連線復雜且體積較大。本文基於FPGA晶元,採用VHDL語言,利用層次化、模塊化設計方法,提出了一種FSK數據機的實現方法。
1 系統整體結構框圖
本文設計的FSK數據機採用了ALTERA公司的EP1C3T144C8晶元,系統主時鍾頻率為20 MHz(晶元外部有源晶振),「0」,「1」數字信號由偽隨機信號(m序列)發生器產生。為完成FSK調制器和解調器的發送與接收,由FPGA晶元完成的系統整體邏輯功能框圖如圖1所示。
2 系統的具體設計與實現
2.1 偽隨機序列的產生
最大長度線性移位寄存器序列(m序列)是數字通信中非常重要的、應用十分廣泛的一種偽隨機序列。由於他具有隨機性、規律性及較好的自相關性和互相關性,而且要求設備簡單,易於實現,成本低的特點,本系統採用m序列作為數字基帶信號進行程序調試。
m序列是由帶線性反饋的移位寄存器產生的周期最長的一種二進制序列。線性反饋移位寄存器的一般結構如圖2所示。他是由n級移位寄存器,若干模二加法器組成線性反饋邏輯網路和時鍾脈沖產生器連接而成。
㈦ 我想用FPGA數碼管顯示DS18B20測量的信息。引腳怎麼連接啊
可以的。
上面是我做的FPGA讀取DS18B20的實例。
DS18B20用FPGA控制有點麻煩,因為FPGA的時序處理復雜。所以你要嚴格遵守DS18B20的時序圖,按上面標明的時序進行處理。
祝你成功!
㈧ fpga如何實現單片機控制功能
你可以試著用FPGA裡面的軟核去實現MCU的功能(比如Nois軟核),像你如果要測量距離,一般是需要A/D轉換功能的,一般FPGA不帶這個功能的,所以你要外加A/D晶元,轉成數字量以後交給FPGA處理。
如果用純硬體電路做,則需要一系列的組合電路和時序電路知識,比如你可以配置成編碼器,解碼器,觸發器。就當成是數字電路設計用FPGA去實現而已。具體設計要看具體東西的。
㈨ 將32路數據採集回來,由ADG706接到FPGA上,再用RS232接到上位機上。RS232介面協議那部分怎麼編
你想怎麼遍就怎麼編,不過你確定232介面行?數據量大了232很不穩定的,一定要校驗,最好用485
波特率越高,傳送數據越快,當然也就越不穩定,你的數據量看來是不小了,波特率得設高一些,波特率只要兩邊一致就可以了,數據包你自己定義吧,隨便你定義,反正是你自己用,無所謂了
如果距離長也會增加不穩定因素的,波特率如果很高了,對線的質量與232介面卡的要求也高,記得買質量好的
唉,你就是沒有一點的經驗了,你隨便找個產品的說明書,看看別人的通訊協議,你一下就明白了,也省得我在這里與你說那麼麻煩
㈩ 如何用FPGA加速卷積神經網路
深度學習本身是一個非常龐大的知識體系。本文更多想從程序員的視角出發,讓大家觀察一下深度學習對程序員意味著什麼,以及我們如何利用這樣一個高速發展的學科,來幫助程序員提升軟體開發的能力。
本文根據費良宏在2016QCon全球軟體開發大會(上海)上的演講整理而成。
前言
1973年,美國上映了一部熱門的科幻電影《WestWorld》,三年之後又有一個續集叫做《FutureWorld》。這部電影在80年代初被引進到中國叫《未來世界》。那部電影對我來講簡直可以說得上是震撼。影片中出現了很多機器人,表情豐富的面部下面都是集成電路板。這讓那時候的我覺得未來世界都是那麼遙遠、那麼神秘。
時間到了2016年,很多朋友可能都在追看HBO斥巨資拍攝的同一題材的系列劇《WestWorld》。如果前兩部電影還是局限在機器人、人工智慧這樣的話題,2016年的新劇則在劇情和人工智慧的思考方面有了很大的突破。不再渲染機器人是否會威脅到人類,而是在探討「Dreamsaremainlymemories」這一類更具哲理的問題。
「記憶究竟如何影響了智能」這個話題非常值得我們去思考,也給我們一個很好的啟示——今天,人工智慧領域究竟有了怎樣的發展和進步。
今天我們探討的話題不僅僅是簡單的人工智慧。如果大家對深度學習感興趣,我相信各位一定會在搜索引擎上搜索過類似相關的關鍵字。我在Google上以deeplearning作為關鍵字得到了2,630萬個搜索的結果。這個數字比一周之前足足多出了300多萬的結果。這個數字足以看得出來深度學習相關的內容發展的速度,人們對深度學習的關注也越來越高。
從另外的一個角度,我想讓大家看看深度學習在市場上究竟有多麼熱門。從2011年到現在一共有140多家專注人工智慧、深度學習相關的創業公司被收購。僅僅在2016年這種並購就發生了40多起。
其中最瘋狂的是就是Google,已經收購了 11 家人工智慧創業公司,其中最有名的就是擊敗了李世石九段的 DeepMind。排名之後的就要數 Apple、Intel以及Twitter。以Intel 公司為例,僅在今年就已經收購了 3 家創業公司,Itseez、Nervana 和 Movidius。這一系列大手筆的並購為了布局人工智慧以及深度學習的領域。
當我們去搜索深度學習話題的時候,經常會看到這樣的一些晦澀難懂的術語:Gradient descent(梯度下降演算法)、Backpropagation(反向傳播演算法)、Convolutional Neural Network(卷積神經網路)、受限玻耳茲曼機(Restricted Boltzmann Machine)等。
如打開任何一篇技術文章,你看到的通篇都是各種數學公式。大家看到如下左邊的圖,其實並不是一篇高水準的學術論文,而僅僅是維基網路關於玻耳茲曼機的介紹。維基網路是科普層面的內容,內容復雜程度就超過了大多數數學知識的能力。
在這樣的背景之下,我今天的的話題可以歸納成三點:第一,我們為什麼要學習深度學習;第二,深度學習最核心的關鍵概念就是神經網路,那麼究竟什麼是神經網路;第三,作為程序員,當我們想要成為深度學習開發者的時候,我們需要具備怎樣的工具箱,以及從哪裡著手進行開發。
為什麼要學習深度學習
首先,我們談談為什麼要學習深度學習。在這個市場當中,最不缺乏的就是各種概念以及各種時髦新技術的詞彙。深度學習有什麼不一樣的地方?我非常喜歡AndrewNg(吳恩達)曾經用過的一個比喻。
他把深度學習比喻成一個火箭。這個火箭有一個最重要的部分,就是它的引擎,目前來看在這個領域裡面,引擎的核心就是神經網路。大家都知道,火箭除了引擎之外還需要有燃料,那麼大數據其實就構成了整個火箭另外的重要組成部分——燃料。以往我們談到大數據的時候,更多是強調存儲和管理數據的能力,但是這些方法和工具更多是對於以往歷史數據的統計、匯總。
而對於今後未知的東西,這些傳統的方法並不能夠幫助我們可以從大數據中得出預測的結論。如果考慮到神經網路和大數據結合,我們才可能看清楚大數據真正的價值和意義。AndrewNg就曾經說過「我們相信(神經網路代表的深度學習)是讓我們獲得最接近於人工智慧的捷徑」。這就是我們要學習深度學習的一個最重要的原因。
其次,隨著我們進行數據處理以及運算能力的不斷提升,深度學習所代表的人工智慧技術和傳統意義上人工智慧技術比較起來,在性能上有了突飛猛進的發展。這主要得益於在過去幾十間計算機和相關產業不斷發展帶來的成果。在人工智慧的領域,性能是我們選擇深度學習另一個重要的原因。
這是一段Nvidia在今年公布的關於深度學習在無人駕駛領域應用的視頻。我們可以看到,將深度學習應用在自動駕駛方面,僅僅經歷了3千英里的訓練,就可以達到什麼樣的程度。在今年年初進行的實驗上,這個系統還不具備真正智能能力,經常會出現各種各樣的讓人提心吊膽的狀況,甚至在某些情況下還需要人工干預。
但經過了3千英里的訓練之後,我們看到在山路、公路、泥地等各種復雜的路況下面,無人駕駛已經有了一個非常驚人的表現。請大家注意,這個深度學習的模型只經過了短短幾個月、3千英里的訓練。
如果我們不斷完善這種模型的話,這種處理能力將會變得何等的強大。這個場景裡面最重要的技術無疑就是深度學習。我們可以得出一個結論:深度學習可以為我們提供強大的能力,如果程序員擁有了這個技術的話,無異於會讓每個程序員如虎添翼。
神經網路快速入門
如果我們對於學習深度學習沒有任何疑慮的話,接下來就一定會關心我需要掌握什麼樣的知識才能讓我進入到這個領域。這裡面最重要的關鍵技術就是「神經網路」。說起「神經網路」,容易混淆是這樣兩個完全不同的概念。
一個是生物學神經網路,第二個才是我們今天要談起的人工智慧神經網路。可能在座的各位有朋友在從事人工智慧方面的工作。當你向他請教神經網路的時候,他會拋出許多陌生的概念和術語讓你聽起來雲里霧里,而你只能望而卻步了。
對於人工智慧神經網路這個概念,大多數的程序員都會覺得距離自己有很大的距離。因為很難有人願意花時間跟你分享神經網路的本質究竟是什麼。而你從書本上讀的到的理論和概念,也很讓你找到一個清晰、簡單的結論。
今天就我們來看一看,從程序員角度出發神經網路究竟是什麼。我第一次知道神經網路這個概念是通過一部電影——1991年上映的《終結者2》。男主角施瓦辛格有一句台詞:
「MyCPUisaneural-netprocessor;alearningcomputer.」(我的處理器是一個神經處理單元,它是一台可以學習的計算機)。從歷史來看人類對自身智力的探索,遠遠早於對於神經網路的研究。
1852年,義大利學者因為一個偶然的失誤,將人類的頭顱掉到硝酸鹽溶液中,從而獲得第一次通過肉眼關注神經網路的機會。這個意外加速了對人類智力奧秘的探索,開啟了人工智慧、神經元這樣概念的發展。
生物神經網路這個概念的發展,和今天我們談的神經網路有什麼關系嗎?我們今天談到的神經網路,除了在部分名詞上借鑒了生物學神經網路之外,跟生物學神經網路已經沒有任何關系,它已經完全是數學和計算機領域的概念,這也是人工智慧發展成熟的標志。這點大家要區分開,不要把生物神經網路跟我們今天談到的人工智慧有任何的混淆。
90年代中期,由Vapnik等人提出了支持向量機演算法(Support Vector Machines,支持向量機)。很快這個演算法就在很多方面體現出了對比神經網路的巨大優勢,例如:無需調參、高效率、全局最優解等。基於這些理由,SVM演算法迅速打敗了神經網路演算法成為那個時期的主流。而神經網路的研究則再次陷入了冰河期。
在被人摒棄的十年裡面,有幾個學者仍然在堅持研究。其中很重要的一個人就是加拿大多倫多大學的Geoffery Hinton教授。2006年,他的在著名的《Science》雜志上發表了論文,首次提出了「深度信念網路」的概念。
與傳統的訓練方式不同,「深度信念網路」有一個「預訓練」(pre-training)的過程,這可以方便的讓神經網路中的權值找到一個接近最優解的值,之後再使用「微調」(fine-tuning)技術來對整個網路進行優化訓練。這兩個技術的運用大幅度減少了訓練多層神經網路的時間。在他的論文裡面,他給多層神經網路相關的學習方法賦予了一個新名詞— 「深度學習」。
很快,深度學習在語音識別領域嶄露頭角。接著在2012年,深度學習技術又在圖像識別領域大展拳腳。Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千個類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了將近11個百分點。
這個結果充分證明了多層神經網路識別效果的優越性。從那時起,深度學習就開啟了新的一段黃金時期。我們看到今天深度學習和神經網路的火熱發展,就是從那個時候開始引爆的。
利用神經網路構建分類器,這個神經網路的結構是怎樣的?
其實這個結構非常簡單,我們看到這個圖就是簡單神經網路的示意圖。神經網路本質上就是一種「有向圖」。圖上的每個節點借用了生物學的術語就有了一個新的名詞 – 「神經元」。連接神經元的具有指向性的連線(有向弧)則被看作是「神經」。這這個圖上神經元並不是最重要的,最重要的是連接神經元的神經。每個神經部分有指向性,每一個神經元會指向下一層的節點。
節點是分層的,每個節點指向上一層節點。同層節點沒有連接,並且不能越過上一層節點。每個弧上有一個值,我們通常稱之為」權重「。通過權重就可以有一個公式計算出它們所指的節點的值。這個權重值是多少?我們是通過訓練得出結果。它們的初始賦值往往通過隨機數開始,然後訓練得到的最逼近真實值的結果作為模型,並可以被反復使用。這個結果就是我們說的訓練過的分類器。
節點分成輸入節點和輸出節點,中間稱為隱層。簡單來說,我們有數據輸入項,中間不同的多個層次的神經網路層次,就是我們說的隱層。之所以在這樣稱呼,因為對我們來講這些層次是不可見的。輸出結果也被稱作輸出節點,輸出節點是有限的數量,輸入節點也是有限數量,隱層是我們可以設計的模型部分,這就是最簡單的神經網路概念。
如果簡單做一個簡單的類比,我想用四層神經網路做一個解釋。左邊是輸入節點,我們看到有若干輸入項,這可能代表不同蘋果的RGB值、味道或者其它輸入進來的數據項。中間隱層就是我們設計出來的神經網路,這個網路現在有不同的層次,層次之間權重是我們不斷訓練獲得一個結果。
最後輸出的結果,保存在輸出節點裡面,每一次像一個流向一樣,神經是有一個指向的,通過不同層進行不同的計算。在隱層當中,每一個節點輸入的結果計算之後作為下一層的輸入項,最終結果會保存在輸出節點上,輸出值最接近我們的分類,得到某一個值,就被分成某一類。這就是使用神經網路的簡單概述。
除了從左到右的形式表達的結構圖,還有一種常見的表達形式是從下到上來表示一個神經網路。這時候,輸入層在圖的最下方,輸出層則在圖的最上方。從左到右的表達形式以AndrewNg和LeCun的文獻使用較多。而在Caffe框架里則使用的則是從下到上的表達。
簡單來說,神經網路並不神秘,它就是有像圖,利用圖的處理能力幫助我們對特徵的提取和學習的過程。2006年Hinton的那篇著名的論文中,將深度學習總結成三個最重要的要素:計算、數據、模型。有了這三點,就可以實現一個深度學習的系統。
程序員需要的工具箱
對於程序員來說,掌握理論知識是為了更好的編程實踐。那就讓我們看看,對於程序員來說,著手深度學習的實踐需要准備什麼樣的工具。
硬體
從硬體來講,我們可能需要的計算能力,首先想到的就是CPU。除了通常的CPU架構以外,還出現了附加有乘法器的CPU,用以提升計算能力。此外在不同領域會有DSP的應用場景,比如手寫體識別、語音識別、等使用的專用的信號處理器。還有一類就是GPU,這是一個目前深度學習應用比較熱門的領域。最後一類就是FPGA(可編程邏輯門陣列)。
這四種方法各有其優缺點,每種產品會有很大的差異。相比較而言CPU雖然運算能力弱一些,但是擅長管理和調度,比如讀取數據,管理文件,人機交互等,工具也豐富。DSP相比而言管理能力較弱,但是強化了特定的運算能力。
這兩者都是靠高主頻來解決運算量的問題,適合有大量遞歸操作以及不便拆分的演算法。GPU的管理能力更弱一些,但是運算能力更強。但由於計算單元數量多,更適合整塊數據進行流處理的演算法。
FPGA在管理與運算處理方面都很強,但是開發周期長,復雜演算法開發難度較大。就實時性來說,FPGA是最高的。單從目前的發展來看,對於普通程序員來說,現實中普遍採用的計算資源就還是是CPU以及GPU的模式,其中GPU是最熱門的領域。
這是我前天為這次分享而准備的一個AWS 上p2的實例。僅僅通過幾條命令就完成了實例的更新、驅動的安裝和環境的設置,總共的資源創建、設置時間大概在10分鍾以內。而之前,我安裝調試前面提到的那台計算機,足足花了我兩天時間。
另外,從成本上還可以做一個對比。p2.8xLarge 實例每小時的費用是7.2美元。而我自己那台計算機總共的花費了是¥16,904元。這個成本足夠讓我使用350多個小時的p2.8xLarge。在一年裡使用AWS深度學習站就可以抵消掉我所有的付出。隨著技術的不斷的升級換代,我可以不斷的升級我的實例,從而可以用有限的成本獲得更大、更多的處理資源。這其實也是雲計算的價值所在。
雲計算和深度學習究竟有什麼關系?今年的8月8號,在IDG網站上發表了一篇文章談到了這個話題。文章中做了這樣一個預言:如果深度學習的並行能力不斷提高,雲計算所提供的處理能力也不斷發展,兩者結合可能會產生新一代的深度學習,將帶來更大影響和沖擊。這是需要大家考慮和重視的一個方向!
軟體
深度學習除了硬體的基礎環境之外。程序員會更關心與開發相關的軟體資源。這里我羅列了一些曾經使用過的軟體框架和工具。
Scikit-learn是最為流行的一個Python機器學習庫。它具有如下吸引人的特點:簡單、高效且異常豐富的數據挖掘/數據分析演算法實現; 基於NumPy、SciPy以及matplotlib,從數據探索性分析,數據可視化到演算法實現,整個過程一體化實現;開源,有非常豐富的學習文檔。
Caffe專注在卷及神經網路以及圖像處理。不過Caffe已經很久沒有更新過了。這個框架的一個主要的開發者賈揚清也在今年跳槽去了Google。也許曾經的霸主地位要讓位給他人了。
Theano 是一個非常靈活的Python 機器學習的庫。在研究領域非常流行,使用上非常方便易於定義復雜的模型。Tensorflow 的API 非常類似於Theano。我在今年北京的QCon 大會上也分享過關於Theano 的話題。
Jupyter notebook 是一個很強大的基於ipython的python代碼編輯器,部署在網頁上,可以非常方便的進行互動式的處理,很適合進行演算法研究合數據處理。
Torch 是一個非常出色的機器學習的庫。它是由一個比較小眾的lua語言實現的。但是因為LuaJIT 的使用,程序的效率非常出色。Facebook在人工智慧領域主打Torch,甚至現在推出了自己的升級版框架Torchnet。
深度學習的框架非常之多,是不是有一種亂花漸欲迷人眼的感覺?我今天向各位程序員重點介紹的是將是TensorFlow。這是2015年穀歌推出的開源的面向機器學習的開發框架,這也是Google第二代的深度學習的框架。很多公司都使用了TensorFlow開發了很多有意思的應用,效果很好。
用TensorFlow可以做什麼?答案是它可以應用於回歸模型、神經網路以深度學習這幾個領域。在深度學習方面它集成了分布式表示、卷積神經網路(CNN)、遞歸神經網路(RNN) 以及長短期記憶人工神經網路(Long-Short Term Memory, LSTM)。
關於Tensorflow 首先要理解的概念就是Tensor。在辭典中對於這個詞的定義是張量,是一個可用來表示在一些向量、標量和其他張量之間的線性關系的多線性函數。實際上這個表述很難理解,用我自己的語言解釋Tensor 就是「N維數組」而已。
使用 TensorFlow, 作為程序員必須明白 TensorFlow這樣幾個基礎概念:它使用圖 (Graph) 來表示計算任務;在被稱之為 會話 (Session) 的上下文 (context) 中執行圖;使用 Tensor 表示數據;通過 變數 (Variable) 維護狀態;使用 feed 和 fetch 可以為任意的操作(arbitrary operation) 賦值或者從其中獲取數據。
一句話總結就是,TensorFlow 就是有狀態圖的數據流圖計算環境,每個節點就是在做數據操作,然後提供依賴性和指向性,提供完整數據流。
TensorFlow安裝非常簡單,但官網提供下載的安裝包所支持的CUDA 的版本是7.5。考慮到CUDA 8 的讓人心動的新特以及不久就要正式發布的現狀。或許你想會考慮立即體驗CUDA 8,那麼就只能通過編譯Tensorflow源代碼而獲得。目前TensorFlow已經支持了Python2.7、3.3+。
此外,對於使用Python 語言的程序員還需要安裝所需要的一些庫,例如:numpy、protobuf等等。對於卷積處理而言,cuDNN是公認的性能最好的開發庫,請一定要安裝上。常規的Tensorsorflow的安裝很簡單,一條命令足矣:
$ pip3 install —upgrade
如果想評估一下或者簡單學習一下,還可以通過Docker進行安裝,安裝的命令如下:
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
TensorFlow有很多優點。首先,目前為止,深度學習的開發框架裡面TensorFlow的文檔做的最好,對程序員學習而言是非常好的一點。第二,TensorFlow有豐富的參考實例,作為參考學習起來非常容易。
第三,開發者社區活躍,在任何一個深度學習的社區里,都有大量關於TensorFlow的討論。第四,谷歌的支持力度非常大,從2015年到現在升級速度非常快,這是其他開源框架遠遠達不到的結果。
參考TensorFlow的白皮書,我們會看到未來TensorFlow還將會有巨大的發展潛力。讓我特別感興趣是這兩個方向。第一,支持跨多台機器的 parallelisation。盡管在0.8版本中推出了並行化的能力,但是目前還不完善。隨著未來不斷發展,依託雲計算的處理能力的提升這個特性將是非常讓人振奮的。
第二,支持更多的開發語言,對於開發者來說這是一個絕大的利好,通過使用自己擅長的語言使用TensorFlow應用。這些開發語言將會擴展到Java、Lua以及R 等。
在這里我想給大家展示一個應用Tensorflow 的例子。這個例子的代碼託管在這個網址上 。白俄羅斯的現代印象派藝術家Leonid Afremov善於用濃墨重彩來表現都市和風景題材,尤其是其雨景系列作品。他習慣用大色塊的鋪陳來營造光影效果,對反光物體和環境色的把握非常精準。
於是我就找到了一張上海東方明珠電視塔的一張攝影作品,我希望通過Tensorflow 去學習一下Leonid Afremov 的繪畫風格,並將這張東方明珠的照片處理成那種光影色彩豐富的作品風格。利用Tensorflow 以及上面提到的那個項目的代碼,在一個AWS 的p2類型的實例上進行了一個一千次的迭代,於是就得到了下圖這樣的處理結果。
這個處理的代碼只有350行里,模型使用了一個成名於2014年ImageNet比賽中的明星 VGG。這個模型非常好,特點就是「go depper」。
TensorFlow 做出這樣的作品,並不僅僅作為娛樂供大家一笑,還可以做更多有意思的事情。將剛才的處理能力推廣到視頻當中,就可以看到下圖這樣的效果,用梵高著名的作品」星月夜「的風格就加工成了這樣新的視頻風格。
可以想像一下,如果這種處理能力在更多領域得以應用,它會產生什麼樣的神奇結果?前景是美好的,讓我們有無限遐想。事實上我們目前所從事的很多領域的應用開發都可以通過使用神經網路和深度學習來加以改變。對於深度學習而言,掌握它並不是難事。每一個程序員都可以很容易的掌握這種技術,利用所具備的資源,讓我們很快成為深度學習的程序開發人員。
結束語
未來究竟是什麼樣,我們沒有辦法預言。有位作家Ray Kurzweil在2005年寫了《奇點臨近》一書。在這本書裡面他明確告訴我們,那個時代很快到來。作為那個時代曙光前的人群,我們是不是有能力加速這個過程,利用我們學習的能力實現這個夢想呢?
中國人工智慧的發展
人工智慧的時代無疑已經到來,這個時代需要的當然就是掌握了人工智慧並將其解決具體問題的工程師。坦率的說,市場上這一類的工程師還屬於鳳毛麟角。職場上的薪酬待遇可以看得出來這樣的工程師的搶手的程度。人工智慧這門學科發展到今天,就學術自身而言已經具備了大規模產業化的能力。
所以說,對於工程師而言當務之急就是盡快的掌握應用人工智慧的應用技術。當下在互聯網上關於人工智慧的學習資料可以說已經是「汗牛充棟」,那些具備了快速學習能力的工程師一定會在人工智慧的大潮當中脫穎而出。
中國發展人工智慧產業的環境已經具備。無論從創業環境、人員的素質乃至市場的機遇而言完全具備了產生產業變革的一切條件。與美國相比較,在人工智慧的許多領域中國團隊的表現也可以說是不逞多讓。就人工智慧的技術層面而言,中國的工程師與全球最好的技術團隊正處於同一個起跑線上。
時不我待,中國的工程師是有機會在這個領域大展身手的。不過值得注意的是,要切忌兩點:一是好高騖遠,盲目與國外攀比。畢竟積累有長短,術業有專攻,我們要立足於已有的積累,尋求逐步的突破。二是一擁而上,盲目追求市場的風口。人工智慧的工程化需要大量的基礎性的積累,並非一蹴而就簡單復制就可以成功。
中國的科研技術人員在人工智慧領域的成就有目共睹。在王詠剛的一篇文章裡面,他統計了從2013年到2015年SCI收錄的「深度學習」論文,中國在2014年和2015年超已經超過了美國居於領跑者的位置。
另外一讓我感到驚訝的事情,Google的JeffDean在2016年發表過一篇名為《TensorFlow:Asystemforlarge-scalemachinelearning》的論文。文章的22個作者裡面,明顯是中國名字的作者占已經到了1/5。如果要列舉中國人/華人在人工智慧領域里的大牛,吳恩達、孫劍、楊強、黃廣斌、馬毅、張大鵬……很容易就可以說出一大串。
對於中國來說目前的當務之急是人工智慧技術的產業化,唯有如此我們才可以講科研/智力領域的優勢轉化為整體的、全面的優勢。在這一點上,中國是全球最大的消費市場以及製造業強國,我們完全有機會藉助市場的優勢成為這個領域的領先者。
矽谷創新企業
矽谷雖然去過許多回,但一直無緣在那裡長期工作。在人工智慧領域的市場我們聽到的更多是圍繞Google、Apple、Intel、Amazon這樣的一些大型科技公司的一舉一動。但是在美國市場上還有一大批小型的創業企業在人工智慧這個領域有驚艷的表現。僅以矽谷區域的公司為例:
Captricity,提供了手寫數據的信息提取;
VIVLab,針對語音識別開發了虛擬助手服務;
TERADEEP,利用FPGA提供了高效的卷積神經網路的方案;
還有提供無人駕駛解決方案的NetraDyne。
這個名單還可以很長,還有許許多多正在利用人工智慧技術試圖去創造歷史的團隊正在打造他們的夢想。這些團隊以及他們正在專注的領域是值得我們去學習和體會的。