通信理論に特化した深層学習 第9回ゼミ資料
AMP ネットの学習1
豊橋技術科学大学 電気・電子情報工学系
准教授 竹内啓悟
モジュール
A
𝒙𝒙
A𝑡𝑡= 𝒙𝒙
B𝑡𝑡+ 𝑨𝑨
T𝒛𝒛
𝑡𝑡,
モジュール
B
𝒙𝒙
B𝑡𝑡+1= tanh 𝒙𝒙
A𝑡𝑡𝜎𝜎
2+ 𝛼𝛼𝑣𝑣
B𝑡𝑡.
関数を要素ごとに適用𝒛𝒛
𝑡𝑡= 𝒚𝒚 − 𝑨𝑨𝒙𝒙
B𝑡𝑡+ 𝛼𝛼𝛼𝛼
𝑡𝑡−1𝒛𝒛
𝑡𝑡−1.
近似的メッセージ伝播法(
AMP)
反復回数
𝑇𝑇
のAMP
をT
層順伝播型ネットワークとみなして、パラメータ
𝛼𝛼𝛼𝛼
𝑡𝑡−1と𝛼𝛼𝑣𝑣
B𝑡𝑡をデータから学習したい。第
𝑡𝑡 + 1
層目のレイヤー𝒚𝒚 𝒛𝒛
𝑡𝑡−1𝒙𝒙
B𝑡𝑡𝒚𝒚 − 𝑨𝑨𝒙𝒙
B𝑡𝑡+ 𝜆𝜆
𝑡𝑡−1𝒛𝒛
𝑡𝑡−1tanh 𝒙𝒙
B𝑡𝑡+ 𝑨𝑨
T𝒛𝒛
𝑡𝑡𝜎𝜎
2+ 𝑣𝑣
𝑡𝑡𝒚𝒚 𝒛𝒛
𝑡𝑡𝒙𝒙
B𝑡𝑡+1 注意•
通信路行列𝑨𝑨
は真の値を使い、学習対象としない。•
入力層では𝒛𝒛
−1= 𝟎𝟎
と𝒙𝒙
B0= 𝟎𝟎
を使用する。•
パラメータ{𝜆𝜆
𝑡𝑡−1, 𝑣𝑣
𝑡𝑡}
をデータから学習する。•
初期値は𝜆𝜆
𝑡𝑡−1= 0
と𝑣𝑣
𝑡𝑡= 0
とする。残留干渉雑音を無視した場合の並列干渉除去から学習開始
行ベクトル表現
入力を列ベクトルのシステムから行ベクトルのシステムに変換する。
通信路モデル
𝒚𝒚 = 𝒙𝒙𝑨𝑨 + 𝒘𝒘 ∈ ℝ
1×𝑀𝑀, 𝒘𝒘 ∼ 𝒩𝒩 𝟎𝟎, 𝜎𝜎
2𝑰𝑰
𝑀𝑀.
𝒛𝒛
𝑡𝑡∈ ℝ
1×𝑀𝑀の再定義𝒛𝒛
𝑡𝑡= 𝒚𝒚 − 𝒙𝒙
B𝑡𝑡𝑨𝑨 + 𝜆𝜆
𝑡𝑡−1𝒛𝒛
𝑡𝑡−1𝒙𝒙
B𝑡𝑡+1∈ ℝ
1×𝑁𝑁の再定義𝒙𝒙
B𝑡𝑡+1= tanh 𝒙𝒙
B𝑡𝑡+ 𝒛𝒛
𝑡𝑡𝑨𝑨
T𝜎𝜎
2+ 𝑣𝑣
𝑡𝑡𝑨𝑨 ∈ ℝ
𝑁𝑁×𝑀𝑀:通信路行列訓練データの生成関数
import numpy as np import tensorflow as tf import math
def MIMOChannel(M, N, L, SNR_dB):
inputs = 1. - 2.*np.random.randint(2, size=(L, N))
#1
または-1
の一様乱数inputs = inputs.astype(np.float32)
A_ = np.random.normal(size=[N, M], scale=1.0/math.sqrt(M))
#
平均0
、標準偏差scale
のガウス乱数sigma = math.pow(10., -SNR_dB/20.) outputs = np.matmul(inputs, A_) +
np.random.normal(size=[L,M], scale=sigma) A = tf.constant(A_, dtype='float32')
sigma2 = tf.constant(sigma*sigma, dtype='float32')
#
固定テンソル(パラメータ)の定義return inputs, outputs, A, sigma2
AMP
に対応するレイヤーclass AMPLayer(tf.keras.layers.Layer):
def __init__(self, M, N, A, sigma2, **kwargs):
super(AMPLayer, self).__init__(**kwargs) self.M = M
self.N = N self.A = A
self.sigma2 = sigma2
def build(self, input_shape):
self.Lambda = self.add_weight("Lambda",
shape=[1,], initializer='zeros', trainable=True, constraint='non_neg')
self.v = self.add_weight("v", shape=[1,],
initializer='zeros', trainable=True, constraint='non_neg')
#
非負制約def call(self, inputs):
・・・・
名前の定義に後で使用