【アルゴリズム】パーセプトロン

# ０．はじめに																					
大学でデータサイエンスの講義を受講している者です。
あまりにも広範囲な分野であるため"広く浅く"情報整理したいため投稿。
内容のレベルは超入門編、個人的な感情も少し入り混じった備忘録。
（齟齬がある場合はご指摘いただけると助かります。）	

#### データサイエンス学習全体像
[【データサイエンス】概要](https://qiita.com/AkihideKato/items/9dbce22bd87a9c8a3989)
[【データサイエンス】人工知能](https://qiita.com/AkihideKato/items/6381dd320ead9f893577)
[【データサイエンス】機械学習](https://qiita.com/AkihideKato/items/1db3312e8038bd75e89b)
[【データサイエンス】ディープラーニング](https://qiita.com/AkihideKato/items/92b0fb83b35ec08c4e02)
[【データサイエンス】分析の分類・確率分布](https://qiita.com/AkihideKato/items/6fdca6e22f03f0b9f17c)
[【データサイエンス】探索的データ分析](https://qiita.com/AkihideKato/items/9485e3f9803b1e8fe785)
[【データサイエンス】統計的検定](https://qiita.com/AkihideKato/items/8ff1b9bada50491b017c)
[【データサイエンス】予測モデリング](https://qiita.com/AkihideKato/items/ce8e697546d0424bea46)
[【データサイエンス】自然言語処理](https://qiita.com/AkihideKato/items/e545f36e268605fce9a6)
[【アルゴリズム】パーセプトロン](https://qiita.com/AkihideKato/items/fc9a8205154fe9b3090f)
[【データサイエンス】機械学習における関数](https://qiita.com/AkihideKato/items/6ec3b59ff581e7e3c4ad)
[【データサイエンス】確率](https://qiita.com/AkihideKato/items/c099772dfca7546a6802)
# １．目的
単一パーセプトロンのアルゴリズムを大まかに理解する

# ２．名称
|名称|意味合い|使用変数|
|---|---|---| 
|入力信号|データ要素|x1,x2|
|重み|パラメータ|w1,w2|
|出力|結果|y|

イメージ図
```mermaid
stateDiagram-v2
  入力A-->x1
  入力B-->x2
  x1 --> y: w1
  x2 --> y: w2
```

# ３．定義
|信号|結果値|
|---|---| 
|流す場合|1|
|流さない場合|0|

|閾値θ|結果値|
|---|---| 
|超えた場合|1|
|超えない場合|0|

# ４．注意点
- パラメータ（公式のようなもの）は変更することが可能	
- 出力yは重みを付けて足し合わせたもの	
- 出力yは決められた閾値に応じて反応＝※閾値θを基準に値が変化する	

# ５．アルゴリズム工程
||工程|
|---|---|
|**1**|仮説より信号と重みを計算をする（結果A）|
|**2**|結果Aを閾値と比較する|
|**3**|閾値を条件分岐しyを出力|
|**4**|仮説と正しいか判断する|

# ６．例題
### 6-1.問題A
次の組み合わせの場合、重みw1,w2と閾値θを求めたい
- ##### パラメータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/a8722550-9581-59a7-32cc-c588146851d3.png)
- ##### 組み合わせ
|x1 |x2 |y |
|---|---|---| 
|0 | 0| 0|
|1 | 0| 0|
|0 | 1| 0|
|1 | 1| 1|

- ##### 解説
2つの入力信号共に1の場合、出力yを1。閾値θによってｙの出力は0/1
無限にあるが今回は``w1,w2 = 3、θ = 5``の組み合わせが当てはまる
組み合わせに当てはめてみる
```java
3×0 + 3×0 = 0, y == 0 // θ = 5のためθより小さい
3×1 + 3×0 = 3, y == 0 // θ = 5のためθより小さい
3×0 + 3×1 = 3, y == 0 // θ = 5のためθより小さい
3×1 + 3×1 = 6, y == 1 // θ = 5のためθより大きい
```


### 6-2.問題B
次の組み合わせの場合、重みw1,w2と閾値θを求めたい

- ##### 組み合わせ
|x1 |x2 |y |
|---|---|---| 
|0 | 0| 1|
|1 | 0| 1|
|0 | 1| 1|
|1 | 1| 0|

- ##### 解説
出力yが問題Aの逆パターン
**重みを変えずパラメータを変更することで当てはまる**
``w1,w2=3、θ＝5``の組み合わせで再び計算をする
```java
3×0 + 3×0 = 0, y == 1 // θ = 5のためθより小さい
3×1 + 3×0 = 3, y == 1 // θ = 5のためθより小さい
3×0 + 3×1 = 3, y == 1 // θ = 5のためθより小さい
3×1 + 3×1 = 6, y == 0 // θ = 5のためθより大きい
```

- ##### パラメータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/2eb0ca37-1666-ab78-7b36-602d2dfe2295.png)

# ７．結論
**``組み合わせによってはできないものもある``**
無限に組み合わせがあるため割愛

例題ではある入力に対しある出力がされるようにパラメータを調整した
**``機械学習ではこの調整を自動で行ってくれるようなイメージ``**
重みは知識となり蓄えられる
**``つまり回数を重ねるごとに多くの組み合わせを表現することが可能``**

# ８．多層パーセプトロン
仮説Ａを式で表すと以下になる
``x2 = -x1 + 5``
図に展開し出力yの0/1をそれぞれプロット化する
　⇒　0は〇、1は✕などと区別化してみる
式で表した部分を境界とした場合プロット〇、✕を分別することができる
だが当たり前だが組み合わせによってはできないものも存在する

そこで
**``複数のパーセプトロンを組み合わせることにより実現をすることができる``**
これが多層パーセプトロン

### 8-1.デメリット
- 0/1のような線形的に判断するデータしか学習できない
- 学習時間の遅延：多層パーセプトロンの発達により活用範囲は広がったが、コネクションが膨張したことによる学習時間が長くなることが考えられる


# 補足(2023/08/21追記）
### パーセプトロンの種類											
- **``ANDゲート``**：2つの入力が1である場合、1を出力しそれ以外は0、問題AがANDゲート			
- **``NANDゲート``**：2つの入力が1である場合、0を出力しそれ以外は1、問題BがNANDゲート			
他にも種類がある
- **``ORゲート``**：2つの入力のうち少なくとも1つが1である場合、1を出力しそれ以外は0		
- **``XORゲート``**：2つの入力のうちどちらかが1である場合、1を出力しそれ以外は0																	
### パーセプトロンの数値表現											
x yの入力出力それぞれ組み合わせ（テーブル）をグラフにプロットする						
出力0・1は線形で分けることができる										
だがXORゲートは線形で分けることはできない										
組み合わせは存在しないことから**パーセプトロンにおいては限界である**							
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/f0550191-8f4c-78ac-1195-2ef828fb8f97.png)
									
											
NAND、OR、ANDゲートを組み合わせること
多層構造にすることによりXORゲート表現が可能
この構造を``多層パーセプトロン``と呼ぶ

# おわりに
「知識が蓄えられて・・学習されて・・」と最初何のことを言ってるのか
そもそも学習とは？のレベルから参入したため「？」が絶えなかった。
今回のパーセプトロンの原理を学んだことにより機械学習の根源が見えた気がした。
引き続きアルゴリズムにおいては初歩的なものは調べていく予定

参考文献：SIOS TEC.LAB
[[AI入門] ディープラーニングの仕組み　～その1：ニューラルネットワークってなに？～](https://tech-lab.sios.jp/archives/20705)
最終アクセス：2023/08/21