setコマンドについて

  • -eオプション

実行したコマンドが失敗したときにシェルスクリプトの実行を終了する。

  • -xオプション

実行するコマンドを出力する。

foobar:~ foobar$ echo $HOME
+ echo /Users/foobar
/Users/foobar
++ printf '\e]7;%s\a' file://foobar.local/Users/foobar

Refs

tmpフォルダーのgit管理

フォルダは存在していて欲しいけど、中身のファイルはgit管理されたくない時。

  • 以下をプロジェクト下の.gitignoreに記述。
tmp/*
!.gitkeep

あるいは残したいディレクトリに .gitignore を置き、

/*

としてもいい。

Refs

GCPインスタンスのファイヤーウォール設定

Flaskアプリケーションにアクセスしたかった際の備忘録。

  1. Firewall Rule設定ページを開く f:id:KK462:20180318040932p:plain
  2. Ruleを作成する f:id:KK462:20180318041005p:plain
    • Name: デフォルトで設定されているsshの例) default-allow-ssh
    • 優先度: そのままでいい
    • トラフィックの方向: ingress(incoming) = 上り、egress(outbound) = 下り
    • ターゲット: ターゲットとなるVMインスタンスのタグ
    • ソースフィルタ: アクセス元
    • プロトコルとポート: Flaskアプリの例) tcp:5000
  3. GCPインスタンスに2で設定したタグをつける f:id:KK462:20180318041602p:plain
  4. Flaskアプリをhost='0.0.0.0'で起動して、アクセスしてみる

Refs

強化学習について

強化学習について調べた際のメモです。

  • 達成したいゴールがあるが、各行動に対する評価は与えられない場合
  • 「行動の選択肢」と「報酬」
  • 強化学習という名前は脳の学習メカニズムであるオペラント学習に由来する
  • 報酬は「連続した行動の結果」に対して与えられる(フィードバックに時間差がある)
  • 報酬から各行動に対する評価を自分で与える
  • ステップごとの評価を与えなくて良いので教師あり学習よりも複雑な問題を扱える
  • 学習に時間がかかる
  • 状態S、モデルT(状態遷移の関数)、行動A、報酬Rでモデル化 → Markov Decision Process (MDP)
  • 時間的な制約下で報酬を最大化するような、ポリシーπ(S → Aの関数)を獲得する問題
    • 時間割引をすることでローリスクな行動ばかり取ってしまうのを防ぐ
  • Value Iteration (幅優先探索?), Policy Iteration (深さ優先探索?)
  • Q値 = 状態行動価値 = 「状態 s で行動 a を選択後、ずっと最適政策をとりつづけるときの利得の期待値」
  • Sarsa
    • 実際行動してみて一番価値が大きい行動を探す
  • モンテカルロ法
    • 報酬が得られるまで行動してみて、報酬を分配して各行動を評価する
  • Q-Learning
    • Tが不要
    • 期待値(実際の報酬)と見込みの差分から学習する → TD学習
    • 「状態sを離散化した数」×「行動の種類」の表
    • 次の状態の価値を現在推定される値の最大値とする
  • 探索と活用のトレードオフ (exploration and exploitation dilemma)
    • ε-greedy法、Boltzmann分布を使った方法
  • Deep Q-Leaning (DQN)
    • 2013年、Deepmindのチームによる論文1
    • 行動と状態の組み合わせの爆発(状態行動空間の爆発) → ニューラルネットで近似
    • 入力は状態s、出力は行動aの分類
    • Q-LearningでのTD誤差を誤差関数とし、Qをニューラルネット(CNN)化する
    • Experience Replay, Fixed Target, 報酬のclipping
    • Prioritised Experience Replay (学習が進んでいない状態を優先して学習), Duelling DQN (Q関数を状態価値関数とAdvantage関数に分離)
    • Deep Recurrent Q-Network (DRQN)もある
  • A3C (Asynchronous Advantage Actor-Critic): 並列計算、Advantageによる報酬の計算、Actor-Critic
  • TRPO, Generalised Advantage Estimator, UNREAL, PPO

Refs

【追記】 - ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learni…

GANについて

GAN(Generative Adversarial Network)について調べた際のメモです。

GANとは

  • Ian Goodfellow (@goodfellow_ian)が2014年に発表1
  • 生成モデル: 訓練データの分布と生成データの分布が同じになるよう学習
  • 訓練データに対してパラメータが小さく、重要な特徴を学習する
  • GeneratorとDiscriminatorに分かれる
  • Generatorは訓練データと同じようなデータを生成するように学習
  • Discriminatorは与えられたデータが訓練のものか、生成されたものかを見分けるように学習
  • Generatorの学習 → Discriminatorの学習 → Generatorの学習 → ...、とイタチごっこをする
    • Dの学習をk回繰り返したらGを1回学習する、の繰り返し(k=1が多い)
  • Generatorはノイズを元にデータを生成する
  • DCGAN(Deep Convolutional GAN): CNNを使ったモデル → 画像の生成 (元の論文2ではベッドルームの画像の生成)
    • プーリングしない、全結合しない、BatchNormalization、Leaky ReLU
  • LAPGAN, SRGAN, pix2pix, StackGAN, SimGAN, 3D-GAN, CycleGAN, DiscoGAN...
  • MSEだと平均的な(ぼやけた)画像になる(VAE)が、GANだとシャープな画像が生成できる
    • 4Kイメージを8Kにしたり
  • 生成した画像に和や差の演算ができる
  • Deep Learningで課題である「教師なし学習」「タグ無しデータ」を解決する可能性がある

Refs

VSCodeでのGOPATH設定

{
    "go.inferGopath": true,
    "go.gopath": "/your/path/for/specific/project"
}

この順番じゃないとダメ。逆にするとinferGopathがgopathを上書きしてしまう1っぽい。

やっぱり上書きされてしまった。ちゃんとgo.gopathを書いてあげないといけないみたい。。。

{
    "go.gopath": "${workspaceRoot}:${workspaceRoot}/vendor"
}

  1. 「Setting go.inferGopath overrides all of the above」– GOPATH in the VS Code Go extension · Microsoft/vscode-go Wiki · GitHub