令和元年秋期試験午後問題 問3
問3 プログラミング
⇱問題PDF
ニューラルネットワークに関する次の記述を読んで,設問1~4に答えよ。
ニューラルネットワークに関する次の記述を読んで,設問1~4に答えよ。
広告
AI技術の進展によって,機械学習に利用されるニューラルネットワークは様々な分野で応用されるようになってきた。ニューラルネットワークが得意とする問題に分類問題がある。例えば,ニューラルネットワークによって手書きの数字を分類(認識)することができる。
分類問題には線形問題と非線形問題がある。図1に線形問題と非線形問題の例を示す。2次元平面上に分布した白丸(〇)と黒丸(●)について,線形問題(図1の(a))では1本の直線で分類できるが,非線形問題(図1の(b))では1本の直線では分類できない。機械学習において分類問題を解く機構を分類器と呼ぶ。ニューラルネットワークを使うと,線形問題と非線形問題の両方を解く分類器を構成できる。 2入力の論理演算を分類器によって解いた例を図2に示す。図2の論理演算の結果(丸数字)は,論理積(AND),論理和(OR)及び否定論理積(NAND)では1本の直線で分類できるが,排他的論理和(XOR)では1本の直線では分類できない。この性質から,前者は線形問題,後者は非線形問題と考えることができる。〔単純パーセプトロンを用いた論理演算〕
ここでは,図2に示した四つの論理演算の中から,排他的論理和以外の三つの論理演算を,ニューラルネットワークの一種であるパーセプトロンを用いて,分類問題として解くことを考える。図3に最もシンプルな単純パーセプトロンの模式図とノードの演算式を示す。ここでは,円をノード,矢印をアークと呼ぶ。ノード x1 及びノード x2 は論理演算の入力値,ノード y は出力値(演算結果)を表す。ノード y の出力値は,アークがもつ重み(w1,w2)とノードyのバイアス(b)を使って,図3中の演算式を用いて計算する。 単純パーセプトロンに適切な重みとバイアスを設定することで,論理積,論理和及び否定論理積を含む線形問題を計算する分類器を構成することができる。一般に,重みとバイアスは様々な値を取り得る。表1に単純パーセプトロンで各論理演算を計算するための重みとバイアスの例を示す。
例えば,表1の論理和の重みとバイアスを設定した単純パーセプトロンに x1=1,x2=0 を入力すると,図3の演算式から 1×0.5+0×0.5-0.2=0.3>0 となり,出力値は y=1となる。〔単純パーセプトロンのプログラム〕
単純パーセプトロンの機能を実装するプログラム simple_perceptron を作成する。プログラムで使用する定数,変数及び配列を表2に,プログラムを図4に示す。simple_perceptron は,論理演算の入力値の全ての組合せ X から論理演算の出力値 Y を計算する。ここで,関数に配列を引数として渡すときの方式は参照渡しである。また,配列の添え字は0から始まるものとする。〔3層パーセプトロンを用いた論理演算〕
パーセプトロンの層を増やすと,単純パーセプトロンでは解くことのできない非線形問題を解くことができるようになる。例えば排他的論理和を計算する分類器は,3層パーセプトロンを用いて構成することができる。
3層パーセプトロンの模式図とノードの演算式を図5に,排他的論理和を計算するための重みとバイアスの例を表3に示す。ノード m1 及びノード m2 を中間ノードと呼ぶ。〔3層パーセプトロンのプログラム〕
3層パーセプトロンの機能を実装するプログラム three_layer_perceptron を作成する。表2に示したものに加えて,このプログラムで使用する定数及び配列を表4に,プログラムを図6に示す。three_layer_perceptron は,論理演算の入力値の全ての組合せ X から論理演算の出力値 Y を計算する。
分類問題には線形問題と非線形問題がある。図1に線形問題と非線形問題の例を示す。2次元平面上に分布した白丸(〇)と黒丸(●)について,線形問題(図1の(a))では1本の直線で分類できるが,非線形問題(図1の(b))では1本の直線では分類できない。機械学習において分類問題を解く機構を分類器と呼ぶ。ニューラルネットワークを使うと,線形問題と非線形問題の両方を解く分類器を構成できる。 2入力の論理演算を分類器によって解いた例を図2に示す。図2の論理演算の結果(丸数字)は,論理積(AND),論理和(OR)及び否定論理積(NAND)では1本の直線で分類できるが,排他的論理和(XOR)では1本の直線では分類できない。この性質から,前者は線形問題,後者は非線形問題と考えることができる。〔単純パーセプトロンを用いた論理演算〕
ここでは,図2に示した四つの論理演算の中から,排他的論理和以外の三つの論理演算を,ニューラルネットワークの一種であるパーセプトロンを用いて,分類問題として解くことを考える。図3に最もシンプルな単純パーセプトロンの模式図とノードの演算式を示す。ここでは,円をノード,矢印をアークと呼ぶ。ノード x1 及びノード x2 は論理演算の入力値,ノード y は出力値(演算結果)を表す。ノード y の出力値は,アークがもつ重み(w1,w2)とノードyのバイアス(b)を使って,図3中の演算式を用いて計算する。 単純パーセプトロンに適切な重みとバイアスを設定することで,論理積,論理和及び否定論理積を含む線形問題を計算する分類器を構成することができる。一般に,重みとバイアスは様々な値を取り得る。表1に単純パーセプトロンで各論理演算を計算するための重みとバイアスの例を示す。
例えば,表1の論理和の重みとバイアスを設定した単純パーセプトロンに x1=1,x2=0 を入力すると,図3の演算式から 1×0.5+0×0.5-0.2=0.3>0 となり,出力値は y=1となる。〔単純パーセプトロンのプログラム〕
単純パーセプトロンの機能を実装するプログラム simple_perceptron を作成する。プログラムで使用する定数,変数及び配列を表2に,プログラムを図4に示す。simple_perceptron は,論理演算の入力値の全ての組合せ X から論理演算の出力値 Y を計算する。ここで,関数に配列を引数として渡すときの方式は参照渡しである。また,配列の添え字は0から始まるものとする。〔3層パーセプトロンを用いた論理演算〕
パーセプトロンの層を増やすと,単純パーセプトロンでは解くことのできない非線形問題を解くことができるようになる。例えば排他的論理和を計算する分類器は,3層パーセプトロンを用いて構成することができる。
3層パーセプトロンの模式図とノードの演算式を図5に,排他的論理和を計算するための重みとバイアスの例を表3に示す。ノード m1 及びノード m2 を中間ノードと呼ぶ。〔3層パーセプトロンのプログラム〕
3層パーセプトロンの機能を実装するプログラム three_layer_perceptron を作成する。表2に示したものに加えて,このプログラムで使用する定数及び配列を表4に,プログラムを図6に示す。three_layer_perceptron は,論理演算の入力値の全ての組合せ X から論理演算の出力値 Y を計算する。
広告
設問1
表1中のaに入れる適切な数値を解答群の中から選び,記号で答えよ。
a に関する解答群
- -0.7
- -0.2
- 0.2
- 0.7
解答例・解答の要点
a:ア
解説
〔aについて〕この問題では、表1「単純パーセプトロンで各論理演算を計算するための重みとバイアスの例」で示されているw1とw2の値と、図3「単純パーセプトロンの模式図とノードの演算式」で示されている演算式を用いて、[a]にあてはまる論理積のバイアスbの例として適切な値を解答群から選びます。
図3「単純パーセプトロンの模式図とノードの演算式」で示されている演算式は以下の2つです。
y = 0 (x1 × w1 + x2 × w2 + b ≦ 0の場合)
y = 1 (x1 × w1 + x2 × w2 + b > 0の場合)
簡単に言うと、式の値が0を超えれば1を返し、0以下ならば0を返す関数ということです。y = 1 (x1 × w1 + x2 × w2 + b > 0の場合)
まず、y = 0 (x1 × w1 + x2 × w2 + b ≦ 0の場合)を考えます。論理積の場合、y=0となるのは、(x1,x2)が(0,0)、(0,1)、(1,0)の3通りの場合です。入力値に対する重みであるw1とw2の値は、w1=0.5、w2=0.5ですので、次の各式が求められます。
- (x1,x2)=(0,0)の場合
- 0 × 0.5 + 0 × 0.5 + b ≦ 0 ⇔ b ≦ 0
- (x1,x2)=(0,1)の場合
- 0 × 0.5 + 1 × 0.5 + b ≦ 0 ⇔ 0.5 + b ≦ 0
- (x1,x2)=(1,0)の場合
- 1 × 0.5 + 0 × 0.5 + b ≦ 0 ⇔ 0.5 + b ≦ 0
- (x1,x2)=(1,1)の場合
- 1 × 0.5 + 1 × 0.5 + b > 0 ⇔ 1 + b > 0
∴a=ア:-0.7
広告
設問2
表3の値を用いた場合に,図5で入力値 x1=1,x2=0 に対する中間ノード m2 の出力値を答えよ。
解答例・解答の要点
1
解説
図5より、中間ノードm2の出力値は以下の演算式で求めることができます。m2 = 0 (x1 × w1(m2) + x2 × w2(m2) + b ≦ 0の場合)
m2 = 1 (x1 × w1(m2) + x2 × w2(m2) + b > 0の場合)
図5中で言えば以下の2つのアーク及びバイアスを合計する処理になります。演算式に、問題文のx1=1、x2=0、表3のw1(m2)=-0.5、m2(w2)=-0.5、b=0.7を、それぞれ代入すると、m2 = 1 (x1 × w1(m2) + x2 × w2(m2) + b > 0の場合)
1 × (-0.5) + 0 × (-0.5) + 0.7 = 0.2
となり、0より大きいため、m2の出力値(y)は「1」となります。
∴1
広告
設問3
図4及び図6中のア~キに入れる適切な字句を答えよ。
解答例・解答の要点
ア:BY
イ:X[out] [in]
ウ:WY[in]
エ:0より大きい
オ:WM[mid] [in]
カ:M[out] [mid] ※順不同
キ:WY[mid] ※順不同
イ:X[out] [in]
ウ:WY[in]
エ:0より大きい
オ:WM[mid] [in]
カ:M[out] [mid] ※順不同
キ:WY[mid] ※順不同
解説
〔アについて〕単純パーセプトロンでは、「入力値1×重み1+入力値2×重み2+バイアス」の値によって出力値が変わります。プログラムを見ると5行目に[イ]×[ウ]があり、これが入力ノードの分だけ「入力値×重み」を足し合わせる処理であることが推察できます。また、[エ]のif文では出力値の分岐が行われているため、バイアスを加算するタイミングは[ア]の場所しかありません。バイアスの値は変数 BY が保持しているので、この値を ytemp に代入することになります。
∴ア=BY
〔イ、ウについて〕
5行目は、演算式の入力値と重みをかける部分(x1 × w1 または x2 × w2)を表しています。表2より入力値は配列 X に、重みは配列 WY に、それぞれ格納されています。また、out は現在処理中の入力値の組合せ(0~3)を、in は現在処理中の入力ノード(0~1)を表しているので、これらを使って入力値と重みを表現できます。
例えば、配列 X の0番目の入力値の組合せ([0,0])の出力値を求めているときには、out が0になっているので、for文で in を0から1に増やしながら、
- X[0][0] × WY[0] ⇔ 0 × 0.5
- X[0][1] × WY[1] ⇔ 0 × 0.5
∴イ=X[out][in]
ウ=WY[in]
※[イ]と[ウ]は、このプログラムだけだったら順不同で構わないのですが、3層パーセプトロンで空欄となっている[イ]に同じ字句が入るので、この順番でなければなりません。
〔エについて〕
パーセプトロンは、演算式の値が0より大きければ1、0以下ならば0を出力します。ytemp には演算式の結果が格納されているので、ytemp の値によって出力値を変えることになります。分岐処理で代入先となっている配列Yは、出力値(演算結果)を格納する配列であり、if文の条件式が真のときに1を格納しているので、「ytempが0より大きい」という条件式とするのが適切です。
∴エ=0より大きい
〔オについて〕
3層パーセプトロンのプログラムでは、単純パーセプトロンから以下の部分が変更されています。この部分は入力値から各中間ノードの出力を求め、その出力値をもとに ytemp に値を加算する処理を行っています。単純パーセプトロンでは入力値にノードyのアークが持つ重み WY を乗じていましたが、3層構造では入力ノードは中間ノードに連結されているので、入力値に乗じるのは中間ノードのアークが持つ重みになります。
中間ノードのアークが持つ重みは配列 WM に格納されており、現在処理中の中間ノードは mid に、現在処理中の入力ノードは in に保持されているので、対応する重みは WM[mid][in] で指定することになります。
∴オ=WM[mid][in]
〔カ、キについて〕
この行の処理は、図3中のyの演算結果を求める式をプログラムとして実装した部分です。
m1 × w1(y) + m2 × w2(y) + b(y)
ここでは、各中間ノードの出力値にノードyのアークが持つ重みを乗じて演算結果を求めています。各中間ノードの出力値は直前の分岐処理で M[out][mid] に格納されているので、これをそのまま利用できます。よって、[カ]には M[out][mid] が入ります。重みにはノードyのアークが持つ重みである WY を使用します。演算式では「m1 × w1(y)」「m2 × w2(y)」というように、1番目の中間ノードには1番目の重みを、2番目の中間ノードには2番目の重みを使用しているので、M[out][mid] のときには WY[mid] を指定するのが適切です。
∴カ=M[out][mid]
キ=WY[mid]
(カとキは順不同)
広告
設問4
2入力の同値(EQ)と否定論理和(NOR)のうち,単純パーセプトロンで解くことができるのはどちらか。論理演算の名称を答え,解くことができる理由を20字以内で述べよ。
なお,同値とは,二つの入力値が等しい場合に1,等しくない場合に0となる論理演算である。
なお,同値とは,二つの入力値が等しい場合に1,等しくない場合に0となる論理演算である。
解答例・解答の要点
名称:否定論理和
理由:否定論理和は線形問題だから (13文字)
理由:否定論理和は線形問題だから (13文字)
解説
問題文の〔単純パーセプトロンを用いた論理演算〕に、「単純パーセプトロンに適切な重みとバイアスを設定することで、論理積、論理和及び否定論理積を含む線形問題を計算する分類器を構成することができる」とあります。このことから、線形問題は単純パーセプトロンで解くことができることが読み取れます。同値(EQ)と否定論理和(NOR)が線形問題であるかどうかを判断するために、図2「2入力の論理演算を分類機によって解いた例」のような図に表します。すると、同値(EQ)は1本の直線で分類できず、否定論理和(NOR)は1本の直線で分類できることがわかります。よって、名称は「否定論理和」、理由は「否定論理和は線形問題だから」が適切です。
∴名称=否定論理和
理由=否定論理和は線形問題だから
広告
広告