応用情報技術者 2019年 秋期 午後 問03
ニューラルネットワークに関する次の記述を読んで、設問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:
表中のaに入れる適切な数値を解答群の中から選び、記号で答えよ。
解答群
ア:-0.7
イ:-0.2
ウ:0.2
エ:0.7
模範解答
a:ア
解説
解答の論理構成
-
単純パーセプトロンの判定条件
【問題文】の「図3」では
y = { 0(x1 × w1 + x2 × w2 + b ≦ 0 の場合)/ 1(x1 × w1 + x2 × w2 + b > 0 の場合) }
と明示されています。すなわち、和が正のときだけ出力が 1 になります。 -
論理積(AND)の真理値表の制約
AND では入力と出力の組が
(0,0)→0, (1,0)→0, (0,1)→0, (1,1)→1
で固定です。したがって- だけが正例(>0)
- 残り 3 パターンは 0 以下
となるように を決める必要があります。
-
の値を代入して不等式を立てる
表1により 。- のとき:
- のとき:
- のとき:
- のとき:
-
条件を同時に満たす範囲
が唯一の許容範囲です。 -
選択肢の比較
解答群
ア:-0.7, イ:-0.2, ウ:0.2, エ:0.7
のうち、範囲に入るのは 「-0.7」 だけです。
よって a = -0.7 を選択します。
誤りやすいポイント
- 判定式の「≦ / >」の向きを取り違え、境界値を誤る。
- しか正例がない AND の特徴を忘れ、 も 1 にしてしまう。
- を見落とし、計算を 1.0 や 2.0 で行ってしまう。
- の条件を“同時に満たす”必要があることを意識せず、片方の不等式だけで選択肢を決める。
FAQ
Q: AND なのに が共に正で良いのですか?
A: はい。重みが正であってもバイアス を負に設定することで、入力が両方 1 のときだけ総和が正になります。
A: はい。重みが正であってもバイアス を負に設定することで、入力が両方 1 のときだけ総和が正になります。
Q: ちょうどでは駄目なのですか?
A: 図3の演算式は「」のときだけ 1 を出す仕様です。 だと や で総和が 0 になり 1 を出さないため条件を満たします。しかし で総和が と正になり 1 を返すので理論上は可です。ただし選択肢に無いので最も典型的な値として を採用しています。
A: 図3の演算式は「」のときだけ 1 を出す仕様です。 だと や で総和が 0 になり 1 を出さないため条件を満たします。しかし で総和が と正になり 1 を返すので理論上は可です。ただし選択肢に無いので最も典型的な値として を採用しています。
Q: 重みを変えてバイアスを 0 にすることは可能ですか?
A: 不可能ではありませんが、今回の表1では重みが固定されている前提なので、 を調整して条件を満たすのが最もシンプルです。
A: 不可能ではありませんが、今回の表1では重みが固定されている前提なので、 を調整して条件を満たすのが最もシンプルです。
関連キーワード: パーセプトロン、重み、バイアス、線形分離、論理積
設問2:
表3の値を用いた場合に、図5で入力値x1=1, x2=0に対する中間ノードm2の出力値を答えよ。
模範解答
1
解説
解答の論理構成
-
判定条件の確認
【問題文】図5のノード演算式には
“m2 = { 0 (x1 × w1(m2) + x2 × w2(m2) + b(m2) ≦ 0 の場合) 1 (x1 × w1(m2) + x2 × w2(m2) + b(m2) > 0 の場合) }”
と明記されています。したがって、 が より大きいとき m2 の出力は になります。 -
重み・バイアスの代入
表3の “m2” 行より
“w1 = -0.5”、“w2 = -0.5”、“b = 0.7”
であることが分かります。 -
入力値の代入
設問が指定する入力は “x1=1, x2=0” です。
よって和は
-
ステップ関数の判定
なので演算式の後半 “1 ( … > 0 の場合 )” に該当し、m2 の出力は となります。
誤りやすいポイント
- “b = 0.7” の符号を誤って“−0.7”と読み取ると合計が負になり、出力を と誤答しがちです。
- ステップ関数の比較演算子 “> 0” と “≦ 0” を取り違えるミスに注意してください。
- なので が になることを見落とし、“” と計算してしまうケースも頻発します。
FAQ
Q: バイアスは和にどのタイミングで加えれば良いですか?
A: 【問題文】図5の式が示す通り、入力に重みを掛けた総和を求めた後、最後に “b(m2)” を加えてください。
A: 【問題文】図5の式が示す通り、入力に重みを掛けた総和を求めた後、最後に “b(m2)” を加えてください。
Q: “>0” の条件を“≧0”としてはいけませんか?
A: いけません。図5に“> 0”と厳密に書かれているため、 ジャストは 側とみなされ、出力は になります。
A: いけません。図5に“> 0”と厳密に書かれているため、 ジャストは 側とみなされ、出力は になります。
Q: 3層パーセプトロンでも各層で同じステップ関数を使うのですか?
A: はい。本問で示された図5・表3はすべて同じ二値ステップ関数で動作する前提です。
A: はい。本問で示された図5・表3はすべて同じ二値ステップ関数で動作する前提です。
関連キーワード: パーセプトロン、重み、バイアス、ステップ関数、非線形分離
設問3:
図4及び図6中のア〜キに入れる適切な字句を答えよ(カ、キは順不同)。
模範解答
ア:BY
イ:X[out][in]
ウ:WY[in]
エ:0より大きい
オ:WM[mid][in]
カ:M[out][mid]
キ:WY[mid]
解説
解答の論理構成
-
バイアスを初期値として設定
図4の 1 行目で ytemp ← ア と初期化している部分は、ノード y に固定で加算されるバイアスです。【表2】には「BY 変数 ノード y のバイアスの値(b)を表す変数」と明記されているので ア=BY となります。 -
入力 × 重み の逐次加算
pseudo ytemp ← ytemp + イ × ウループ変数 in は 0〜NI-1、out は 0〜NC-1 を走査します。
・入力値は【表2】の「X 配列 論理演算の入力値の全ての組合せを表す2次元配列」で、要素参照は X[out][in]。
・重みは【表2】の「WY 配列 ノード y のアークがもつ重み」で、要素参照は WY[in]。
よって イ=X[out][in]、ウ=WY[in] です。 -
出力 0 / 1 の判定
ステップ関数は【図3】にy = 0 (… ≦0 の場合) / 1 (… >0 の場合)と示されています。条件部は “0 より大きい” で判定するため エ=0より大きい です。 -
3 層パーセプトロンの中間層
図6の中間ノード計算部
pseudo mtemp ← mtemp + イ × オここでも入力は X[out][in]、重みは中間ノード側なので【表4】「WM 配列」に該当し WM[mid][in]。したがって オ=WM[mid][in] です。 -
出力ノードへの集約
pseudo ytemp ← ytemp + カ × キ“中間ノードの出力” と “出力ノードへ接続する重み” の積を加算する行です。
・中間ノードの出力は【表4】「M 配列 中間ノードの演算結果」を参照し M[out][mid]。
・重みは出力ノード側の WY[mid]。
以上より カ=M[out][mid]、キ=WY[mid](積なので順序は問われません)。
誤りやすいポイント
- WY を「入力層→隠れ層の重み」と誤解し、3 層目の重み配列を別名で作ろうとする。
- 条件式 エ を “0 以上” としてしまい、境界値 0 のときに 1 が出力されるバグを招く。
- オ に WM[in][mid] と添字を逆に書き、重み行列を転置して参照してしまう。
- カ に BY を再利用し、中間層の出力を加算しないままバイアスだけを足してしまう。
FAQ
Q: バイアス BY はなぜループ外で初期化せず毎回 ytemp に代入しているのですか?
A: 全ての入力組合せ out について独立に判定する必要があり、ループを回るたびにバイアスを初期値としてセットし直すためです。
A: 全ての入力組合せ out について独立に判定する必要があり、ループを回るたびにバイアスを初期値としてセットし直すためです。
Q: 出力層の重みも WY を使うと入力層と混同しませんか?
A: 本問題では「ノード y のアークがもつ重み」を一括で WY に保持する設計です。図5 の も y ノードの重みなので同じ配列で管理しています。
A: 本問題では「ノード y のアークがもつ重み」を一括で WY に保持する設計です。図5 の も y ノードの重みなので同じ配列で管理しています。
Q: “順不同” と書かれている カ、キ の順序は実装上影響しませんか?
A: 積算は交換法則が成り立つため a × b と b × a のどちらでも数値結果は同じになります。可読性の観点で「出力 × 重み」の順に書くと意図が伝わりやすいです。
A: 積算は交換法則が成り立つため a × b と b × a のどちらでも数値結果は同じになります。可読性の観点で「出力 × 重み」の順に書くと意図が伝わりやすいです。
関連キーワード: パーセプトロン、バイアス、重み行列、ステップ関数
設問4:
2入力の同値(EQ)と否定論理和(NOR)のうち、単純パーセプトロンで解くことができるのはどちらか。論理演算の名称を答え、解くことができる理由を20字以内で述べよ。
なお、同値とは、二つの入力値が等しい場合に1,等しくない場合に0となる論理演算である。
模範解答
名称:否定論理和
理由:否定論理和は線形問題だから
解説
解答の論理構成
- 単純パーセプトロンが扱えるのは「入力空間を“1本の直線で分類できる”線形問題」です。問題文には
「論理積(AND)、論理和(OR)及び否定論理積(NAND)では1本の直線で分類できる」
と記載されています。 - 「排他的論理和(XOR)では1本の直線では分類できない」ため、XOR や同値(EQ=XOR の反転)は非線形問題となり、単純パーセプトロンだけでは解けません。
- 否定論理和(NOR)は論理和(OR)の出力を 0/1 で反転しただけで、入力点の幾何的配置は OR と同じです。したがって OR が線形分離可能なら NOR も同じ直線で分けられます。
- 以上より、単純パーセプトロンで解けるのは「否定論理和」であり、理由は「線形問題だから」となります。
誤りやすいポイント
- 「出力を反転すると非線形になる」と思い込む
→ 反転は平面上の 0/1 ラベルを入れ換えるだけで、境界の形状は変わりません。 - EQ と XOR を混同する
→ XOR が 1 本の直線で分離できない非線形であることを忘れると誤答になります。 - 線形/非線形の判定を重みやバイアスの数で考えてしまう
→ 判断基準は“直線で分けられるか”です。
FAQ
Q: 同値(EQ)が 2 層以上なら解ける理由は?
A: XOR と同様に非線形問題なので、隠れ層を設けた 3 層パーセプトロンで線形変換+再分離を行えば解けます。
A: XOR と同様に非線形問題なので、隠れ層を設けた 3 層パーセプトロンで線形変換+再分離を行えば解けます。
Q: NOR 用の重み・バイアスはどう設定する?
A: OR の例「w1=0.5, w2=0.5, b=-0.2」をそのまま流用し、出力を反転(しきい値符号を逆転)すればよい。具体的には「w1=-0.5, w2=-0.5, b=0.2」など多数の組み合わせが考えられます。
A: OR の例「w1=0.5, w2=0.5, b=-0.2」をそのまま流用し、出力を反転(しきい値符号を逆転)すればよい。具体的には「w1=-0.5, w2=-0.5, b=0.2」など多数の組み合わせが考えられます。
Q: 線形分離可能かどうかを図形的に素早く判断するコツは?
A: 2入力なら ~ の4点が同一直線の両側に分かれるかをチェックすると早いです。
A: 2入力なら ~ の4点が同一直線の両側に分かれるかをチェックすると早いです。
関連キーワード: パーセプトロン、線形分離、論理演算、ニューラルネットワーク、分類器


