C’s メモ

勉強のメモ。

DQNとは?(Deep Q-Network)

DQNとはなんなのだ〜

DQNとはDeep Q-Networkの略で、Q学習を元にした学習手法であり、テレビゲームの学習に使われたりします。
ちなみにQ学習は、最適行動価値関数を決定しますがその近似のためにCNN(Convolutional Neural Network)を用いるものです。

DQNのすごいところは、ゲーム画像のフレームを入力すれば、コントローラーの動きによる動作の”価値”を出力できるところ。
なんと、ゲームの状態(たとえば今走っているとか、今どこにいるとか)を抜き出す必要はなく、ただゲーム画面の画像だけ入力すればよい!!
だから、他のゲームにも容易に応用できてしまう〜💕


かなり浅めな文なので、もっと詳しく分かったらまた書きます。


参考文献:
ゼロから作るDeep Learning -Pythonで学ぶディープラーニングの理論と実装(2018) 斎藤康毅著

Octaveでセミコロンを忘れないで。

セミコロンを忘れない!!というメモ。

セミコロンをつけないで実行してしまうと、つけ忘れた変数の内容を全部見せられてしまって、実行画面が数字の海になるよ。

今まで、数字の海になってたのはセミコロンを忘れていたから。

最後にもう一回、
セミコロンを忘れない!

;

Octaveで配列の先頭に1をつける

Bias unit を追加するために、配列の先頭に1だけでできた列を追加する書き方をメモ。

X = [ones(m, 1) X];

mはXの行の数。


例えば、

X = magic(3)

>>>X =

   8   1   6
   3   5   7
   4   9   2

と適当な3行3列の行列Xを作って、

m = 3

mは3にして、

X = [ones(m, 1) X];

と書くと、

X
>>>X =

   1   8   1   6
   1   3   5   7
   1   4   9   2

Xの全ての行の先頭に1がついた!(1だけでできた列を先頭に追加できた)


以上!

Octaveのmax関数

Octaveのmax関数の使い方2つをメモ。

例の配列 example↓

example = [1 7 3; 4 5 6]

>>>example =

   1   7   3
   4   5   6

【1つめ】
行ごとまたは列ごとの最大値を返してもらう。
使い方: max(配列,[],行か列)

max(example,[],1)    %それぞれの列の中の最大値

>>>ans =

   4   7   6
max(example,[],2)    %それぞれの行の中の最大値

>>>ans =

   7
   6

【2つめ】
全ての要素に対して、要素と指定の数値との最大値をとる
使い方:  max(配列,指定の値)

max(example,5) %要素より 5の方が大きいか等しければ5を、そうでなければ要素を。

>>>ans =

   5   7   5
   5   5   6

そうやって使うのか〜🤔

【Octave】editできないと騒いでいませんか。

Octaveでeditができない!と一晩潰してしまったのでメモ。
(Octaveは何も悪くない。)

安直な解決方法は、octave.cliではなくoctave.guiを使うこと。

octave.guiはエディタのような見た目のところでファイルを編集できます。
octave.cliはターミナル(Windowsならコマンドプロンプト)のような黒い画面で操作ができます。

最初はoctave.cliを使っていて、

edit ファイル名

を実行するとエディタのような表示になるけれども上手くファイルに書き込むことができませんでした。
他の記事を見ても、「edit ファイル名」でできるはずだと書いてあるのでとても悩みました。

そこで、そういえば今使っているoctave.cliの他にoctave.guiもインストールできていたことを思い出し、使ってみたところ使えた!という、、、

なんだか直接解決したわけではないけれど、とりあえずファイルをeditできたので良しとしました。

Octaveは1から数え始めるらしい

PythonやCは要素番号は0から始まっていたけど、Octaveは1から始まるらしいということがわかったからメモ。

(余談:Visual Basic for Applicationはデフォルトが0からだったけど、1にすることもできる!)



要素番号が1かららしいと分かった経緯↓

行列Aを以下のように定めて、

A = [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]

(Aはこんな見た目)

A =

   16    2    3   13
    5   11   10    8
    9    7    6   12
    4   14   15    1


Bにその一部(最初の2列)を代入したい!
正しいやり方のうちの一つは、以下のように。

>> B = A(:,1:2)
B =

   16    2
    5   11
    9    7
    4   14

だけど、PythonとかCとかのノリで0が最初の要素番号だと思ってやってしまうと失敗する(泣)

失敗した様子↓

>> B = A(:,0:2)
error: subscript indices must be either positive integers less than 2^31 or logicals



ついでに、Octaveで1:2と書くと1も2も含まれるっぽい。(両端を含む)