#Scratchで応用情報技術者試験問3(令和元年秋期:ニューラルネットワーク)をプログラム
令和元年秋期の応用情報技術者試験問3では、ニューラルネットワークがテーマとして出題されました。本題では、初歩であるパーセプトロンについの問題でした。私自身ディープラーニングの知識はあまりないのですが、今後の勉強に繋げたいと思います。
IPAの過去問は、こちらです。
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31.html#01aki
Scratchでは、こちらで公開しています。
https://scratch.mit.edu/projects/380609416
##1. 単純パーセプトロンを用いた論理演算
###1-1. 使用する定数、変数及び配列
- NI:入力ノードの数を表す定数。今回は2入力で、2となる。
- NC:論理演算の入力値の全ての組み合わせを表す定数。今回は4となる。
- X:論理演算の入力値の全ての組合せを表す2次元配列。[[0,0],[0,1],[1,0],[1,1]]が設定されている。
- Y:論理演算の出力値(演算結果)を格納する1次元配列。
- WY:ノードyのアークがもつ重みの値を表す1次元配列。
- BY:ノードyのバイアスの値を表す変数。
####1-1-1. 配列X(2次元配列)の用意
Scratchは、2次元配列は使用できないので、リスト(1次元)を2次元配列のようにしています。
####1-1-2. 配列Y(1次元配列)の用意
####1-1-3. 配列WY(1次元配列)の用意
論理積(AND)、論理和(OR)、排他的論理和(XOR:3層パーセプトロンで使う)では、[0.5, 0.5]を与えます。
否定論理積(XOR)では[-0.5, -0.5]を与えます。
###1-2. プログラムsimple_perceptron
単純パーセプトロンのプログラムです。
###1-2-1. 論理積(AND)
ノードyのバイアスの値BYとして、-0.7を与えています。
###実行結果
###1-2-2. 論理和(OR)
ノードyのバイアスの値BYとして、-0.2を与えています。
###実行結果
###1-2-3. 否定論理積(NAND)
ノードyのバイアスの値BYとして、0.7を与えています。
###実行結果
##2. 3層パーセプトロンを用いた論理演算
###2-1. 使用する定数、変数及び配列
単純パーセプトロンを用いた論理演算にて使用したものに加えて、以下のものを使用します。
- NM:中間ノードの数を表す定数。今回、中間ノードの数は二つなので、2となる。
- M:中間ノードの演算結果を格納する2次元配列。
- WM:中間ノードのアークがもつ重みの値を表す2次元配列。
- BM:中間ノードのバイアス値を入れる1次元配列。
####2-1-1. 配列M(2次元配列)の用意
Scratchでは2次元配列は使用できないので、以下のようにしました。(配列Xとは異なる方法です)
先ず、空の1次元リストを作成します。
配列Mへの出し入れは以下の
(おーはしさんという方の、Scratchで二次元配列を使う方法という記事を参考に作成しています。)
####2-1-2. 配列WM(2次元配列)の用意
Scratchは、2次元配列は使用できないので、以下のようにしました。(配列X、配列Mとは異なる方法を試してみました。)
####2-1-3. 配列BM(1次元配列)の用意
中間のノードのバイアス値として、排他的論理和では、[-0.2, 0.7]を与えています。
###2-2. プログラムthree_layer_perceptron
3層パーセプトロンのプログラムです。
###2-2-1. 排他的論理和(XOR)
ノードyのバイアスの値BYとして、-0.6を与えています。
Scratchは子ども向けのものですが、情報技術者試験にもつながる良いツールだと思います。