Prismoid’s diary

自分の備忘録・メモのために書き始めました。年間180記事は書きたい、質は抜きにして。

2018年9月4日メモ

C. Decker 2nd オーサーペーパー
https://www.tik.ee.ethz.ch/file/0a0cc1002c90291bfbc7595a763938c3/goProbe.pdf

C. Decker サイト
Dr. Christian Decker - DISCO

ICDCN2019
https://events.csa.iisc.ac.in/icdcn2019/

Atomic Cross-Chain Swap 論文誌
Atomic Cross-Chain Swaps


Singapore BlockChain
Singapore BlockChain - Google 検索

USENIX 2019
USENIX Security '19 | USENIX

BLOCKDAGs: transaction selection policies
https://blog.daglabs.com/transaction-selection-games-in-blockdags-602177f0f726

Transaction Arraival Rate
"Transaction Arrival Rate" "per second" - Google 検索


IoT identification
https://euagenda.eu/upload/publications/identifiers-in-internet-of-things-iot.pdf

誤差逆伝播の簡易実装

簡易実装のため、汎化性能とか関係なしで。
活性化関数もReLUでもなく、出力層の活性化関数もなし(恒等写像)で誤差関数は自乗誤差。
下記Pythonスクリプトを実行するとシード0では、誤差関数が6250程度から始まり、最終的に10程度のとなる。
やはり、スクラッチで実装すると仕組みが理解しやすい。
(実装の参考:MLPシリーズ深層学習)

import numpy as np 
np.random.seed(0) # シードの初期化

class Network(): 
    def __init__(self, inputMatrix, outputNum1, outputNum2, outputMatrix4): 
        # ミニバッチごとの各ユニットのメモリを確保
        self.inputMatrix = inputMatrix
        self.outputMatrix2 = np.zeros([outputNum1, inputMatrix.shape[1]])
        self.outputMatrix3 = np.zeros([outputNum2, inputMatrix.shape[1]])
        self.outputMatrix4 = np.zeros([outputMatrix4.shape[0], outputMatrix4.shape[1]])
        # 訓練データの出力行列D
        self.D = outputMatrix4
        # ネットワークの各層の重みを定義
        self.W2 = np.random.normal(0, 1, [outputNum1, inputMatrix.shape[0]])
        self.W3 = np.random.normal(0, 1, [outputNum2, outputNum1])
        self.W4 = np.random.normal(0, 1, [outputMatrix4.shape[0], outputNum2])
        # ネットワークの各層のバイアスを定義
        self.b2 = np.random.normal(0, 1, [outputNum1, 1]) 
        self.b3 = np.random.normal(0, 1, [outputNum2, 1])
        self.b4 = np.random.normal(0, 1, [outputMatrix4.shape[0], 1])
        # 全て要素が1の盾ベクトル
        self.vector1 = np.ones([inputMatrix.shape[1], 1])
        # 各ユニットごとの勾配デルタ
        self.Delta4 = np.zeros([outputMatrix4.shape[0], outputMatrix4.shape[1]])
        self.Delta3 = np.zeros([outputNum2, outputMatrix4.shape[1]])
        self.Delta2 = np.zeros([outputNum1, outputMatrix4.shape[1]])
        
    def forward(self): 
        self.outputMatrix2 = np.dot(self.W2, self.inputMatrix) + np.dot(self.b2, self.vector1.T) 
        self.outputMatrix3 = np.dot(self.W3, self.outputMatrix2) + np.dot(self.b3, self.vector1.T) 
        self.outputMatrix4 = np.dot(self.W4, self.outputMatrix3) + np.dot(self.b4, self.vector1.T)
        
    def backward(self): 
        self.Delta4 = self.outputMatrix4 - self.D 
        self.Delta3 = (np.dot(self.W4.T, self.Delta4)) # 活性化関数なし
        self.Delta2 = 1 / self.D.shape[1] * (np.dot(self.W3.T, self.Delta3)) # 活性化関数なし
        
    def weightUpdate(self):
        epsilon = 0.001
        self.W4 = self.W4 - epsilon * 1 / self.D.shape[1] * np.dot(self.Delta4, self.outputMatrix3.T) 
        self.W3 = self.W3 - epsilon * 1 / self.D.shape[1] * np.dot(self.Delta3, self.outputMatrix2.T) 
        self.W2 = self.W2 - epsilon * 1 / self.D.shape[1] * np.dot(self.Delta2, self.inputMatrix.T) 
        
    def calcLoss(self): 
        ret = self.outputMatrix4 - self.D 
        ret = np.sum(ret * ret)
        return ret

X = np.random.normal(0, 1, [4, 10])
D = np.random.normal(0, 1, [3, 10])
network = Network(X, 5, 8, D)


for i in range(10000): 
    network.forward()
    network.backward()
    network.weightUpdate()
    if (i % 100 == 0): 
        print(str(i) + ': ' + str(network.calcLoss()))
||

--- 
メモ: 誤差逆伝搬の重みを変数としてみた場合の線形計算について

One more day to learn English

・September 3rd, 2018

stethoscope 聴診器
light fixture 電灯
in a fireplace 暖炉で
on a couch ソファーの上
molding a shape in clay 粘土で形を作る
warehouse 倉庫
a tire of a vehicle 車のタイヤ
stacks 積み上げられたモノ
vapor trail 飛行機雲
landing on an iland 島に上陸する
convention hall 会議場
get in touch with you あなたに連絡を取る
depart 出発する
blueprints 設計図
sign 標識(名詞で)

Captcha

MLPシリーズの深層学習についての自分用のメモ(順次追加)

・P39の重みの初期化時の分散の設定と、ユニットの分散についての式がおそらく間違っている。
おそらく、

 \sigma = \sigma_u / M^{1/2}

と思われる。下記のスクリプトでこれは確認可能。

# coding: utf-8
import numpy as np 

Num = 100000
M = 100
x = np.random.normal(0, 8, [M, Num])
y = np.random.normal(0, 1, [M, Num])

output_units = np.sum((x * y), axis=0) # np.sum(x * y, axis=0)
output_units.shape

sigma2 = np.dot(output_units.T, output_units) / Num - np.power(np.mean(output_units, axis=0), 2)
sigma = np.sqrt(sigma2)
print(sigma) # 8 * 100^{1/2} となる