您當前的位置:首頁 > 繪畫

論文閱讀:Power of Deep Learning for Channel Estimation

作者:由 立花道雪 發表于 繪畫時間:2020-08-02

前言

論文題目: Power of Deep Learning for Channel Estimation and Signal Detection in OFDM Systems

論文地址:

https://

ieeexplore。ieee。org/doc

ument/8052521/

github原始碼地址:

https://

github。com/haoyye/OFDM_

DNN

利用keras的簡化程式碼

https://

github。com/TianLin0509/

DNN_detection_via_keras

這篇文章是無線通訊與深度學習的經典之作, 作者找到了一個非常好的切入點, 很合理地將深度學習的成熟技術應用到了通訊物理層的處理之中, 目前也應該是同領域的引用之首, 也成為許多同學爭相學習的文章。 這裡根據我自己的認識寫一篇中文的解析, 希望可以幫助大家更好地理解。

中心思想

因為是18年的文章, 文章用了大量篇幅介紹了基礎的深度學習知識。 這一部分筆者就跳過了,和中心思想無關 (並非說文章不好,相反,我覺得作者的介紹極為精煉)。本文的實質核心是Secion II 的 B部分:

論文閱讀:Power of Deep Learning for Channel Estimation

大家首先注意到本文的題目: Power of Deep Learning for

Channel Estimation and Signal Detection

in OFDM Systems。 顧名思義, 本文作者的中心思想就是:

用神經網路來代替傳統通訊中的通道估計和訊號檢測部分。

需要注意的是, 作者不是使用兩個獨立的神經網路,分別完成通道估計和訊號檢測, 而是

直接用一個神經網路來同時完成這兩部分的工作

。 這一點非常有意義, 傳統的通訊受限於設計的複雜度, 在過去幾十年的積澱中, 整個通訊接收的處理過程被有條不紊地分隔成 同步, 校正頻偏, 通道估計, 訊號檢測等多個各司其職的獨立模組,每個模組都有學者進行了獨立的研究。 然而, 神經網路在計算機視覺和自然語言處理等領域的傑出表現, 證明了其可以擬合各種複雜函式的強大能力。 那這樣就很自然的讓人想到, 既然神經網路這麼強大, 我們還需要把訊號接收拆分成那麼多模組嗎? 直接一個網路搞定所有 (事實上無線通訊已經有許多end-to-end的神經網路相關工作)!我舉個例子: 傳統的驗證碼識別中, 演算法往往包括了 去噪, 分隔, 識別等多個步驟, 非常繁瑣。 而基於深度學習的驗證碼識別演算法則一步到位——把驗證碼圖片輸入神經網路, 直接輸出識別出的驗證碼數字。 言歸正傳, 這篇文章也證明了, 一個神經網路,就可以完美地替代 傳統通訊中的 訊號估計和訊號檢測 部分。

具體實現

論文閱讀:Power of Deep Learning for Channel Estimation

說了作者的核心思想, 那麼具體是怎麼實現的呢? 在講這個之前, 我們首先要知道, 傳統通訊是怎麼做的, 並從中得到啟發。

用最簡單的例子來講解一下:

假設基站傳送的訊號為x, 通道為 h, 不考慮噪聲的話, 那麼接收訊號 y = hx。 而接收端要做的就是從y恢復出原始訊號x。 顯然,這非常容易, x = y / h, 小學數學題。 這裡的問題在於,接收端並不知道h是什麼~因此, 就需要通道估計, 來估計出h。 思路也非常簡單, 基站會先發送一個pilot訊號x1 (實際中為了估計的更準確, 往往是傳送一串),這個pilot訊號,中文被稱為導頻訊號。 這個是基站和接收端約定好的,也就是說,接收端是已知x1的。 這時候, 接收端接收到的經過通道的訊號就是 y = hx1, 那麼就可以再用小學數學解出 h = y / x1。這就是通道估計的思路。 當然在實際中由於噪聲等問題, 不會這麼簡單地處理, 比如會用MSE準則來估計等。 但萬變不離其宗, 傳統通訊的基本思想就是這樣。

這就可以啟發 神經網路 的設計和實現。 我們現在知道,作者的目標是用神經網路替代通道估計和訊號檢測。 而神經網路的設計, 其實本質上就是設計三個東西:

輸入是什麼, 輸出又是什麼

損失函式是什麼

網路具體的架構

我們先講後兩個——損失函式, 其實渾然天成。 既然神經網路要做的是訊號檢測, 那麼我們期望的是神經網路的輸出結果就是原始傳送訊號x, 也就是說, 標籤就是原始傳送訊號x。 在物理層通訊中, x就是0或1。 那麼這就是深度學習中基礎的二分類問題——可以用交叉熵或mse作為損失函式。 本文中,

作者選用了mse作為損失函式

, 即:

論文閱讀:Power of Deep Learning for Channel Estimation

網路的具體架構, 這個在CV或NLP領域也許比較重要,但這在無線通訊中,其實並不關鍵。 因為無線通訊中往往不需要很複雜的神經網路架構, 那麼,DNN全連線網路(Dense網路)往往是最好的網路選擇——CNN或RNN都可以看做DNN的特例。在沒有面臨訓練難度的時候, 全連線網路是最好的萬金油。 本文的神經網路就是由5層全連線層組成,分別用了256, 500, 250, 120, 16個神經元。 這個數量級是無論如何也算不上大網路的,因此網路的架構其實並不是本文的重點。 更合理地應該說, 作者找到了一個很好的神經網路的應用場景,然後隨便找了一個基本的網路,就得到了很好的效果。

最重要的就是, 輸入和輸出分別是什麼? 輸出,很容易理解, 既然我們的目的是要恢復出原始訊號, 那我們的輸出值就是我們恢復的訊號唄。 (但這裡需要一些處理, 後面再詳細說) 那麼輸入是什麼呢? 顯然,我們應該把可用的資訊都給到神經網路, 那在這個例子中, 可用的資訊就是接收到的資料y, 這就是網路的輸入。 但是剛剛不是說到嘛,傳統中是需要透過通道估計來獲取h的資訊, 才能從y回覆出x。那對於我們這個神經網路,難道也要先用傳統的通道估計估計出h,再把h和y一起輸入神經網路嘛? 不!這樣太傻啦!

正確的開啟方式是:

基站傳送導頻訊號後用戶得到的接收訊號記為y1, 基站傳送的資料訊號,使用者得到的接收訊號記為y2, 我們直接把[y1, y2]一起輸入神經網路, 那麼神經網路就一定有能力恢復出原始訊號!

原因? 很簡單, 我們把傳統方法中所用到的所有資訊都給了網路, 傳統演算法都能做到的東西, 難道神經網路做不好嗎? 這可是能戰勝李世石的東西!

因此, 神經網路的輸入就是導頻的接收訊號和資料接收訊號。

實現細節

上一節中, 用最簡單的語言講述了本文的核心架構。 這一節講實現的細節:

OFDM系統: 本文是基於OFDM架構, 這裡就不詳細解釋了,大家可以自行百度。 簡單地說下就是, 我剛剛舉的例子, x都是一個一個位元的傳送, 在實際的OFDM系統中, 訊號是一幀一幀的傳送, 比如64個位元組成一幀,再透過FFT, IFFT等操作到頻域端處理~這裡大家只要記住, y = hx中, x 和 y 都是向量(含有多個位元)。 舉文中的一個例子: 基站先發送了一幀64 * 1的導頻訊號, 再發送了一幀64 * 1的資料訊號, 那麼接收端總共收到的就是128*1的一個向量。 注意, 通訊中因為訊號分為I路和Q路傳送, 所以向量中的每個元素都是一個複數。 而主流的深度學習框架(tensorflow, pytorch)往往都是隻支援實數操作的,所以文中採用的操作就是把向量的實部和虛部拆分後再拼接成一個256 *1的實數向量, 即向量的前128個元素是原向量的實部, 後128個元素是虛部。 從資訊的角度看, 原複數向量的資訊沒有任何丟失地輸入到了網路中。

導頻資料, 以上個例子為例。 作者令基站傳送兩幀訊號,第一幀為導頻,第二幀為資料。 那麼需要注意的重點是——這個導頻序列可以是任意的 ( 1 0 0 1 … 或是 0 0 1 1…並不重要), 但必須是統一的。 即訓練和測試中的導頻序列要永遠保持一致。 這一點很容易理解——用同一個導頻序列, 對網路進行訓練,那麼在訓練的過程中, 網路會逐漸地學習到這個導頻序列, 並會以這個導頻序列來進行訊號處理。 結果你在測試的時候,突然換了另一個導頻序列, 那顯然網路就工作不了了, 坑網路也不是這麼坑的哈~

多個網路並行。 這一點很多讀者都容易想不通, 但其實非常簡單。 還是剛剛的例子, 基站傳送了兩幀資料, 其中第二幀的64 * 1的複數向量是資料, 即128個位元的資訊。 那麼最直接的就是指定網路的輸出就是128 * 1的實數向量, 每個元素對應每個恢復的位元。 但是作者沒有采用直接的思路, 文章的做法是

使用8個並行的網路, 每個網路的輸入和結構都一模一樣, 分別負責16個位元的檢測。

加起來就檢測了所有128個位元。比如第一個網路檢測的是1-16個位元, 第二個就是17-32個位元…。 這裡主要有兩個注意點: 1。 每個網路雖然只檢測16個位元, 但是都會輸入所有的接收訊號。 這是因為OFDM系統中每個位元都和所有的接收訊號相關。 即使不從通訊的角度考慮, 我們也應該把所有可得的資訊都交給網路來處理。 2。 其實是可以只用一個網路來直接檢測128個位元, 但根據筆者的實踐,一個網路的效能即誤位元速率,效能比分成8個網路差了不少。 因此,雖然分成8個網路增加了複雜度, 但是效能上提升了很多。 這裡提一句: 在程式碼中, 其實只需要模擬一個網路就可以了, 而不需要模擬8個網路——因為我們的目標是誤位元速率,這本來就是位元的平均值,所以1個網路的誤位元速率和8個網路是一樣的, 因此模擬一個網路的結果和8個網路的結果一樣,能明白嗎?

論文閱讀:Power of Deep Learning for Channel Estimation

再說一下整體的流程。 還是這張圖,線上下訓練過程中, 先使用模擬, 得到了一堆訓練資料。 什麼是訓練資料呢? 其實就是模擬產生了不同的通道 和 傳送資料(包括不變的導頻和變化的資料x), 然後把傳送資料透過通道再加上噪聲, 得到了接收訊號y。 這個接收訊號y就是輸入訊號, 資料x就是標籤。 {x,y}就可以看成一個樣本。 線上下訓練時,我們生成100萬個樣本(這個100萬隻是我隨口說的,相信堵讀者們不會這麼死板哈)對網路進行訓練。 隨著訓練的迭代, 損失函式越來越小, 也就是說,網路恢復出的資料和原始資料越來越接近。 訓練完畢時,我們將網路中的引數權重都固定, 不再改變。 在線上使用時,只需將接收訊號透過網路, 就可以獲得恢復訊號了。 注意: 這時網路的權重已經固定, 因此複雜度僅僅只是做了幾個矩陣相乘運算而已, 非常低(真正耗時的網路訓練部分線上下可以提前完成, 比如你可以在使用前先花個一天訓練好模型,而真正使用的時候是不需要對網路進行訓練的)。

模擬結果

最後,來看一下網路的效能。

作者再做模擬的時候,可以認為分為了兩種情況——理想情況與非理想情況。 比如下圖:

論文閱讀:Power of Deep Learning for Channel Estimation

64Pilots就是比較理想的情況——充足的導頻訊號,可以做好通道估計。 可以看到, 神經網路的效能在這時候是和傳統方法差不多的。 其實應該說是略遜——這其實可以認為傳統方法差不多做到了這種通訊框架下的極限效能, 神經網路也難以更進一步。 筆者嘗試過調整用更復雜的網路, 但效能也難以突破。 那是否說明神經網路就沒什麼意義了呢? 其實不然, 作者從魯棒性角度, 闡釋了網路相比於傳統演算法更好的適應能力。

圖中同時展示了8個Pilots的場景, 這代表了匱乏的導頻訊號——傳統方法的通道估計幾乎無法實施,因此可以看到, 無論是LS還是MSE方法, 效能都巨差無比,可以說是不能工作了。 而神經網路的方法雖然相比於64Pilots有所下滑, 但相比於傳統演算法有巨大的增益。

這個模擬結果不僅體現了神經網路的魯棒性, 也有很重要的實際意義——我們其實可以減少導頻訊號的數量。 這其實是變向提升了傳輸的速率, 節約的導頻訊號就可以用來傳輸資料了。

論文閱讀:Power of Deep Learning for Channel Estimation

論文閱讀:Power of Deep Learning for Channel Estimation

作者後續又做了其他非理想情況的模擬,比如沒有CP的場景等等,也算是一種探索。模擬結果也大同小異,在非理想場景下, 神經網路展現了遠勝於傳統演算法的效能。

總結

這篇文章作為深度學習和無線通訊結合的經典之作, 我認為有標杆的意義:

精彩地演繹瞭如何找到一個好的切入點,把深度學習引入到通訊系統中

用一個神經網路來代替傳統通訊中多個模組的工作,未來也許可以實現大一統

神經網路在非理想情況下具有更強的魯棒性

標簽: 神經網路  網路  訊號  導頻  通道