1. The DeepCode Paper

在第一讲,我们来summarize一下DeepCode这篇paper的主要思路。

Introduction

  1. 是本文主要研究是的 feedback channel,使用的feedback是一个单位时延的接收信号。也就是说发送端在每次作决策的时候,之前所有发送的信号都已经有反馈回来了。
  2. feedback不会提升信道容量,但是会在有限长码字时提升可靠性。也就是说,对于无限长码字来说,我们单凭发送出coding就能做到和有feedback时一样的效果。但是对于短码,有feedback会大大降低误码率。但是以前的工作中还没能完全exploit feedback带来的好处,本文最主要就是用DeepLearning来设计code。
  3. 一个重要的benchmark就是S-K scheme,但是它对实数精度很敏感(可能是用了很尬modulation的QAM来feedback很多信息)而且仅能用在noiseless feedback的情况下。
  4. [7-9] 扩展了s-k scheme到噪声信道,但是并没有收到很好的增益。
  5. 一个结论是,所有的linear codes + noisy output feedback 都不能achieve正的通信速率。这就麻烦了,因为实际中所有的码都是线性的([9] 倒是提出了一个渐进最优的非线性码字).
  6. 本文主要考虑定长码字(因此rate也fix了),因为变长码字收发端不好agree on length,特别是在noisy feedback的情况下。
  7. Variable length setting下,[11,12]中设计的码字对反馈信道噪声不敏感;[13] 设计了coded feedback发现只要反馈信道SNR够大, 也能提升可靠性。

本文的场景可以概括为:码字有限长,fixed rate (有限码长传输的信息也fix),passive feedback (接收端仅feedback接收的信号)。

System Model

在这里插入图片描述
就DL来说,本文的模型还是比较简单的。首先,transmitter的主要目的就是把 K K K 个 bits b \bm{b} b 发送给接收端:

  1. 发送端每次传输的信号是 x i x_i xi;
  2. 接收端每次收到的信号是 y i = x i + n i y_i=x_i+n_i yi=xi+ni;
  3. 接收端反馈 y i y_i yi, 发送端收到 y ~ i = y i + w i \tilde{y}_i=y_i+w_i y~i=yi+wi.

所以可以看出,这其实是一个比较简单的系统 – 整个系统中唯一的不确定性就是噪声。因此我们在发送端和接收端需要设计编码器和译码器来对抗噪声。

发送端设计

文中讲了很多错误和曲折,我们直接跳到最后的设计。
发送端的设计如下图所示:
在这里插入图片描述
可以看到,总共有 K K K bits有待发送。那么发送端

  1. 首先把K个bits传输一遍,这一步没有用到任何code design,只是为了得到噪声序列的一个realization,相当于后面check bits需要学习的就是怎么纠正前面实例化的噪声。注意 a a a w w w 都是tunable parameter作者的解释是让DL自己学会功率分配balance不同bits的传输功率。实际上就是说,DNN不容易学到功率分配,所以得单独拎出来让DNN学。
  2. 把K个bits传一遍之后,文中设计让DNN逐个纠正bits,每个bits产生俩check bits且每次都把之前check bits的噪声当做输入信息来generate这一次的check bits。作者还用了RNN让每次check bits的生成和前几次check bits的产生形成联系。即,最终所有的code是作为一个序列产生的,RNN需要去exploit这个序列之间的关系。

[关于RNN的选取]: 注意,统计意义上说,原始的 K K K 个bits之间本来是没有任何时序关系的,都是iid的,而且添加的噪声也没任何时序关系。更具体地说,发送端的所有输入序列 b \bm{b} b, n \bm{n} n, w 1 \bm{w_1} w1, w 2 \bm{w_2} w2内部没有任何时序关系,把他们调换位置都没问题。

那么作者为什么要用RNN尼?我觉得是由第一个phase决定的。因为所有的code都是基于第一个phase的传输来设计的,所以实际上一旦第一个phase的bits被产生并完成传输,那么隐含的意思就是这个sequence完全确定下来了,noise也完全确定下来了,没有任何randomness了。接下来DNN要做的就是去探索怎么在一个确定sequence (第一个phase的noise) 的干扰下恢复另一个确定的sequence ( K K K 个bits序列)。当然这个恢复过程会受到两个随机噪声影响。

以上的分析是对第一个phase中一个确定的 b \bm{b} b n \bm{n} n来分析的,但是作者不可能fix b \bm{b} b n \bm{n} n只改变第二个phase的noise来做文章,所以最终的simulation我猜还是会遍历所有的 b \bm{b} b n \bm{n} n。也就是说,RNN需要学习到:对每一个具体的 b \bm{b} b n \bm{n} n in the first phase,怎么利用它们的时序关系来解码。


我们之所以要重视DNN的选取,是因为发射端的RNN造成了unbalanced BER问题,请看下图
在这里插入图片描述

上图是 K K K个bits的BER curve,明显BER是unbalanced。这就是发送端RNN的代价,即第一个phase的 c k c_k ck仅仅包含 b k b_k bk的信息,第二个phase的 c k c_k ck 仅仅包含 k ′ < k k'<k k<k 哪些信息,所以发送信号中蕴含的最开始的那些bits的信息最多而最后面的那些信息的bits越少。这就导致了unbalanced BER. 作者用了很多方法补救,比如末尾填零, a i a_i ai, w i w_i wi power allocation, etc.

接收端设计

在这里插入图片描述
如果给你一个上述的发送端,你该怎么设计接收端尼?显然不是那么好设计的,因此我们也要用DNN,这里也比较简单粗暴了,就是把接收到的信号全扔进去用bi-directional RNN来解。最后输出是sigmoid激活函数。

这里RNN的选取是很合理的,因为发送端发送的数据肯定是有时序关系的 – 后发送的数据一定是exploit了前面的feedback的,肯定是针对feedback进行了调整的。

最终训练的目的是最小化binary cross-entropy
L ( b , b ^ ) = ∑ i = 1 K [ − b i log ⁡ b ^ i − ( 1 − b i ) log ⁡ ( 1 − b ^ i ) ] \mathcal{L}(\bm{b},\bm{\hat{b}})=\sum_{i=1}^{K}[-b_i\log\hat{b}_i-(1-b_i)\log(1-\hat{b}_i)] L(b,b^)=i=1K[bilogb^i(1bi)log(1b^i)]

总结

总的来说,这篇paper实际上在训练一个大的神经网络,以 b \bm{b} b 为输入,encoder 不断输出数据,加噪声得到接收信号。接收信号再加噪声反馈给发送端构成下一次输入。这样进行K次之后decoder开始译码并计算loss。最终这个大的神经网络就联合训练来minimize loss,然后把encoder decoder分别抽出来以供实际应用。

相当于神经网络内部完成了对输入的加噪解码。即固定了神经网络内部的一部分结构(噪声和反馈链路),训练一个针对这一部分结构的编译码器.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值