機械学習の基礎概念について個人的メモ

## 機械学習の基礎
### 機械学習（ML）とは
機械学習は、新しいデータに対して、自ら判断をすることができるアルゴリズムを構築すること。そのために、多くのデータを用いて、そのようなアルゴリズムの精度を高める過程が必要となる。

#### モデル
機械学習において、入力に対して自ら判断して出力をするアルゴリズム
また、モデルは判断に用いるそのアルゴリズムを改善する（＝**学習する**）ことができる

#### トレーニング
データを入力することで、より正確な出力をするようモデルに学習させること

#### 推論
トレーニングをしたモデルが、新しいデータに対して自ら判断を行うこと

:::note warn
よく似た概念の<strong>人工知能（AI）</strong>は、人間が行うタスクを実行可能な、自然知能を模倣したシステムのことで、AIを実現するテクニックのひとつが**機械学習**
:::

### 機械学習の流れ
1. データを集める
    - 機械学習の目的に沿ったデータを収集
    - データをモデルのトレーニングに適した形へ加工
1. モデルをトレーニングする
    - データを学習アルゴリズムに入力してモデルを構築
1. モデルをテストする
    - モデル構築での入力データを用いて、モデルの品質を評価
1. モデルに推論をさせる
    - モデルを使って、新しいデータに対する予測や意思決定を生成

## データの収集と準備
機械学習のモデルの品質は、学習させるデータの品質に依存するので、非常に重要なプロセスになる。
### ラベル付け
データの**ラベル付け**とは、目的や正解となる出力を、ラベルとして元データに割り当てること。このラベルは、モデルにとってガイドとして機能し、パターン予測と予測機能を向上させる。

https://aws.amazon.com/jp/what-is/data-labeling/

### 構造化データと非構造化データ
<dl>
  <dt>構造化データ</dt>
  <dd>データベースのような形式で整理やフォーマットされたデータ</dd>
  <dd>表形式のデータや連続した一連の測定値のデータなど</dd>
  <dt>非構造化データ</dt>
  <dd>あらかじめ定義された構造や形式がないデータ</dd>
  <dd>テキスト・画像・音声・動画などのデータ</dd>
</dl>

## モデル
### 機械学習での学習手法
3種類存在し、ユースケースによって使い分けられる。

#### 教師あり学習
- 入力値と出力値の正解のペアがあるデータ（ラベル付きデータ）を学習させる手法
- ユースケース：
  1. 正解と不正解に分類する（**分類**）
  1. 連続する数値データの予測（**回帰**）
#### 教師なし学習
- 大量のラベルなしデータを学習させ、それらのパターンや構造を認識させる手法
- ユースケース：
  1. 大量のデータをカテゴリ別にグループ化する（**クラスタリング**）
  1. データ間の関係性や規則性を見つける（**レコメンデーション**など）
#### 強化学習
- 出力結果に点数をつけて、点数が最大化する行動を考えさせる手法
- ユースケース：
  1. 利益が最大になる方法を見つける
  1. ゴールに辿り着くルートを見つける

### モデルによる推論
主な推論は、以下の2種類

<dl>
  <dt>バッチ推論</dt>
  <dd>・モデルが大量のデータをまとめて分析して、一連の結果を出す推論のこと</dd>
  <dd>・意思決定のスピード ＜ 出力の正確さ</dd>
  <dt>リアルタイム推論</dt>
  <dd>・入ってくる新しい情報ごとに、瞬時に結果を出す推論のこと</dd>
  <dd>・意思決定のスピード ＞ 大量のデータの分析</dd>
  <dd>・チャットボットや自動運転など</dd>
</dl>

## 深層学習
深層学習は、機械学習の手法のひとつであり、人間の脳が情報を処理する仕組みを模倣して設計された、**人工ニューラルネットワーク**を使用する。

### ニューラルネットワークとは
人間の脳は、ニューロンと呼ばれる脳細胞が相互接続されたネットワークを形成し、情報処理の際に互いに電気信号を送り合っている。人工ニューラルネットワークでは、ニューロンの代わりに**ノード**というソフトウェアモジュールが相互接続され、**3つの層**を構成している。

#### 入力層
- 人工ニューラルネットワークの外からの情報を受け取る層
- 入力層のノードは、データを次の層に渡す
#### 隠れ層 （非表示層）
- 隠れ層は、入力層か他の隠れ層から入力を受け取り、それを処理した結果を次の層に渡す
- **深層学習**とは、この層を複数所有するニューラルネットワーク（＝**ディープニューラルネットワーク**）を利用したプロセスのことを指す

:::note info
隠れ層を1つしか持たないニューラルネットワークは、シンプルニューラルネットワーク、または単にニューラルネットワークと呼ばれる。
:::

#### 出力層
- 人工ニューラルネットワークにおける、すべてのデータ処理の最終結果を示す層
- 最終結果がバイナリ（0 or 1）の場合、出力層には1つの出力ノードがあり、0または1を示す
- 対して、複雑な結果となる場合では、複数の出力ノードで構成されることもある

![テックブログ用 - ニューラルネットワーク.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946195/1535e0bc-8fa3-09ca-0012-fd080ce6bdd7.jpeg)
※画像はフィードフォワードニューラルネットワークの場合

### ニューラルネットワークの仕組み
ニューラルネットワークの各ノードには、**重み**と**しきい値**というパラメータがある。それらを調整することで、出力結果を最適化していく。

#### 重み
- ノードが受け取る各入力値ごとに調整された、入力値に乗算する係数
- 重みが大きい入力値ほど、出力値に大きな影響を与える
    - したがって、重みはその入力値の**重要度**を表すと言える
#### しきい値
- 出力結果を判断するために、各入力値に重みをつけた値の合計と比較される基準値のようなもの
- 最も単純なアルゴリズムなら、
    - 各入力値に重みをつけた値の和　≧　しきい値　→　1を出力
    - 各入力値に重みをつけた値の和　<　しきい値　→　0を出力

:::note info
ニューラルネットワークの学習
＝ 出力結果が正しくなるよう、**重みとしきい値を調整する**作業
:::

※重みとしきい値に関する分かりやすい例が記載↓

https://www.ctc-g.co.jp/bestengine/article/2018/0809a_01.html

### ニューラルネットワークの代表的な種類
1. **フィードフォワードニューラルネットワーク**
    - すべてのノードが、次の層のすべてのノードに接続される
    - 入力ノードから出力ノードという一方向の流れでデータを処理
    - 単純で基本的な構造であり、深層学習の基礎的なアーキテクチャ
    - 入力データが独立しているため、時系列データや連続性のあるデータには不向き
1. **バックプロパゲーションアルゴリズム**
    - フィードバックループを使用して学習することで、予測を改善するという学習アルゴリズム
    - ノードは、推測結果が間違っていた場合は、重みの大きいノードの重みを修正し、正しかった場合はその接続のノードに高い重みを割り当てる
    - 上記のフィードバックを、出力側から入力側の層へと伝播させていく
1. **畳み込みニューラルネットワーク**
    - 隠れ層が畳み込みという数学的関数を実行する
    - 画像の分類によく使われる

### 参考サイト

https://aws.amazon.com/jp/what-is/neural-network/#:~:text=%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AF%E3%80%81%E4%BA%BA%E9%96%93%E3%81%AE,%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%AD%E3%83%B3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

## その他の語句
<dl>
  <dt>不確実性</dt>
  <dd>モデルの出力が不完全である度合い</dd>
  <dt>説明可能性</dt>
  <dd>モデルの出力の根拠が、人間の言葉で説明できること</dd>
  <dt>ハルシネーション</dt>
  <dd>AIが事実と異なる、間違った情報を生成すること</dd>
</dl>