ディープラーニングのシステムとプログラミング

ディープラーニングのプログラミングとシステム制作に必要な知識とスキルを身につけるために、以下の7つの目標を設定します。

  1. Pythonプログラミング: ディープラーニングのモデル構築やデータ前処理に必要なPythonの基本文法とライブラリの使用方法を学び、実践的なプログラミングスキルを習得します。
  2. ディープラーニングの基礎と機械学習の実践: ニューラルネットワークの仕組み、損失関数、最適化手法、学習と検証、過学習対策などのディープラーニングの基礎理論を学びます。scikit-learnなどのライブラリを活用し、機械学習の実践スキルを身につけます。
  3. ディープラーニングフレームワーク: PyTorchを使用して、ディープラーニングモデルの定義、学習、検証、予測までの一連の流れを習得します。ニューラルネットワークの構築と利用方法を実践的に学びます。
  4. データセット: 大規模データの前処理、画像データの拡張、アノテーションなどのデータ処理スキルを学びます。データローダーの実装、データの可視化、物体検出やセグメンテーションなどのタスクに適したデータセット(COCO, Cityscapesなど)の活用方法を習得します。
  5. ハイパーパラメータ調整と性能評価: ニューラルネットワークの層の数、ユニット数、学習率などのハイパーパラメータの調整方法を学び、性能改善のための実践スキルを身につけます。
  6. 応用スキル: 再学習、転移学習、半教師あり学習、ドメイン適応などの発展的な学習手法を理解します。GANによる画像生成、Transformerを使った自然言語処理、拡散モデル、物体検出やセグメンテーションの応用例を通して、具体的なアプリケーション開発スキルを習得します。
  7. 研究スキル: 先行研究の調査方法と論文読解力を身につけ、最新の技術動向をキャッチアップできる能力を養います。

これらの目標を達成するために、体験的な学習、体系的な知識習得、実践的な演習を組み合わせた授業を行います。さらに、授業で学んだ内容を発展させるために、以下の自主的な取り組みを推奨します。

*

大学授業用に作成した資料を更新・改良して公開しています.これらは クリエイティブコモンズ 表示-非営利-継承 4.0 国際ライセンス(CC BY-NC-SA 4.0) で提供しており,事前の許可なく自由に利用できます.条件は著作者表示(BY),非営利目的のみ(NC),同一ライセンスでの再配布(SA)です.

目次

  1. プログラミングの基礎,AIシステムの基礎: [PDF], [パワーポイント]
  2. ニューラルネットワークの基礎: [PDF], [パワーポイント]
  3. ニューラルネットワークによる分類,未来予測: [PDF], [パワーポイント]
  4. ディープラーニングの利用例: [PDF], [パワーポイント]
  5. 画像分類: [PDF], [パワーポイント]
  6. 物体検出: [PDF], [パワーポイント]
  7. セグメンテーション: [PDF], [パワーポイント]
  8. 姿勢推定: [PDF], [パワーポイント]
  9. 顔情報処理: [PDF], [パワーポイント]
  10. 自然言語処理の基礎: [PDF], [パワーポイント]
  11. Segment Anything ー 汎用性のあるセグメンテーションモデル ー: [PDF], [パワーポイント]
  12. 全体まとめと発展: [PDF], [パワーポイント]

1. プログラミングの基礎,AIシステムの基礎

資料: [PDF], [パワーポイント]

主なポイント

プログラミングの基礎とAIシステムの基礎

  1. プログラミングと人工知能の楽しさ

    プログラミングは人間の力を増幅し、私たちができることを大幅に広げる技術です。プログラミングの特徴として:

    • クリエイティブな行為であり、自分のアイデアを形にすることができる
    • シミュレーション、大量データ処理、AI連携、ITシステム制作など様々な活動で役立つ
    • 作業の自動化や問題解決に活用できる

    人工知能は人間の思考を模倣し、超えることを目指す挑戦的分野です。人工知能の特徴として:

    • 現在進行形の最先端技術であり、未来に向けても発展が続く刺激と興奮に満ちた分野
    • 画像認識、物体検出、顔情報処理、テキスト検出など様々な応用がある
    • データから新しい価値を創造できる能力を持つ
  2. Pythonの基礎

    Pythonプログラミングにおける重要な概念:

    • モジュール:特定の機能を実現するためのPythonプログラムファイル
      • import turtleはturtleモジュールを現在のプログラムにインポート
    • クラスとオブジェクト:クラスは同じ種類のオブジェクトの集まり
      • turtle.Turtle()はturtleモジュールのTurtleクラスのオブジェクト生成
      • Turtleクラスは図形の描画や移動などの操作の機能を実現
    • メソッド:オブジェクトが持つ機能や操作
      • goto(0,100)は指定した座標への移動
      • forward(100)は前進、right(90)は右回りに回転

    タートルグラフィックスでは、カーソルを使って視覚的にプログラミングの結果を確認できます。これにより、プログラミングをゲーム感覚で楽しみながら学習することができます。

  3. 対話型AI(ChatGPT)の活用

    ChatGPTはAIによる対話システムで、以下のような活用方法があります:

    • 文章処理(要約、推敲、翻訳)のほか、問答により学び、新たな視点を得ることができる
    • プログラミング学習における質問や問題解決のサポート
    • プログラム作成の補助やデバッグの支援
    • 勉強用の要点整理や確認問題の作成

    ChatGPT利用上の注意点:

    • AIの回答が間違っている場合がある(必ず根拠を確かめる)
    • 個人情報や機密情報を投稿しない
    • 大学のレポートなどはAIの回答をそのまま提出せず、参考として活用する
  4. AIプログラムの構成

    人工知能プログラムは以下の要素から構成されています:

    1. 学習データの読み込みと前処理:画像のサイズ変更やデータの正規化
    2. モデルの構築:ニューラルネットワークの層の設計
    3. モデルのコンパイル:最適化手法や評価指標の設定
    4. 学習:重みとバイアスの最適化
    5. モデルの検証:学習済みモデルの評価
    6. タスク実行:新たなデータに対する予測

    例として「犬」か「猫」かを判別する画像分類プログラムでは、176の犬画像と183の猫画像で学習し、新しい画像に対して確率を出力します。

演習

演習:PythonプログラミングとAI画像分類の基礎

演習の全体像と進め方

本演習では、Pythonプログラミングの基本的な描画機能から始め、最終的にはAI(人工知能)による画像分類プログラムの構築と実行までを段階的に学びます。

各演習は特定のテーマに焦点を当てていますが、順番に取り組むことで、プログラミングの基礎からAI応用への流れをスムーズに理解できるよう設計されています。

演習

① タートルグラフィックス:基本的な移動

② タートルグラフィックス:星形の描画

③ タートルグラフィックス:繰り返しと色

④ AIによる画像分類(犬と猫)

演習の活用方法

今回の授業で学ぶ意義と満足感

2. ニューラルネットワークの基礎

資料: [PDF], [パワーポイント]

主なポイント

  1. 機械学習の基本概念

    機械学習は、コンピュータがデータを使用して学習することにより知的能力を向上させる技術です。機械学習の特徴として:

    • 情報の抽出能力を持ち、ルールや知識のプログラム化が不要
    • 直感、主観、経験など人間には容易だがプログラム化が困難な作業に対応
    • 一般のプログラミングとは異なり、明示的な指示ではなくデータから学習する能力を持つ

    機械学習における重要な概念として「汎化」があります。これは訓練データから学習したパターンを未知のデータにも適用できる能力です。

  2. ニューラルネットワークの構造と仕組み

    ニューラルネットワークは以下の要素から構成されています:

    • ユニット:基本的な計算単位で、入力の重みづけ、合計とバイアス、活性化関数の適用を行う
    • 層構造:入力層、隠れ層、出力層などから成り、データが一方向に流れる
    • 結合:ユニット間の接続で、重みを持つ

    ニューラルネットワークの処理の原理は:

    1. 入力の重みづけ(入力値に重みを掛ける)
    2. 合計とバイアス(重み付けした入力の合計にバイアスを加える)
    3. 活性化関数の適用(合計値に活性化関数を適用して出力を得る)

    活性化関数には、シグモイド関数やReLU(2011年発表)などがあります。

  3. ニューラルネットワークの学習

    ニューラルネットワークの学習過程は:

    1. 訓練データを用いてニューラルネットワークから結果を出し、正解との誤差を計算
    2. 結合の重みとバイアスを調整して誤差を減らす
    3. 誤差が減らなくなったら最適化完了とみなす

    学習の目的は「望みの出力が得られるように重みとバイアスを調整すること」です。

  4. 畳み込み(Convolution)の仕組み

    畳み込みは:

    • データを移動しながらカーネル(フィルタ)と重ね合わせる操作
    • カーネルと同じ長さにデータを切り出し、要素同士の掛け算と合計を計算
    • 特定のパターンに強く反応するという特性を持つ

    画像処理における畳み込みは、画像データの各部分に対してカーネルを適用し、特徴を抽出します。応用例として、ぼかしやエッジ抽出などの画像処理が挙げられます。

  5. 応用と意義

    この講義の学習意義として:

    • AIの可能性に対する理解と興味の向上
    • AIの設計・実装に必要な知識の修得
    • 実際のプログラムや学習データを通じた直感的理解
    • AI時代に活躍できる人材育成への貢献

    ニューラルネットワークは画像認識や自然言語処理など、幅広い分野で応用されています。

演習

演習の全体像と進め方

本演習では、ニューラルネットワークの基礎概念を段階的に学びます:

  1. 最初に基本的なニューロンの動作原理
  2. 次に複数ニューロンの組み合わせによる複雑な問題解決
  3. さらにニューロンのパラメータ調整の効果
  4. 最後に畳み込み操作の基本原理

各演習は独立していますが、順番に取り組むことで理解が深まるよう設計されています。

演習

①ReLU関数とニューロンの動作

https://trinket.io/python/af9e01d901

ReLU関数とニューロンの動作を実装しています。まず、ReLU関数を定義し、入力が0未満の場合は0を、0以上の場合は入力値をそのまま返します。次に、ニューロンの処理を行うn関数を定義し、3つの入力に対して重みを掛け、バイアスを加えた値をReLU関数に渡します。その後、様々な入力値に対してReLU関数とn関数の出力を表示し、ニューロンの振る舞いを確認しています。

ポイント: プログラムの実行結果を観察し、入力値の変化に対してReLU関数がどのように反応するかに注目してください。特に入力が負の値の場合と正の値の場合の違いを理解することが重要です。

②XOR問題の実装

https://trinket.io/python/8a0eed74c9

3つのニューロンを組み合わせて、XOR(排他的論理和)の機能を実現しています。ReLU関数は前の例と同様です。n1, n2, n3の3つの関数は、それぞれ異なる重みとバイアスを持つニューロンを表現しています。n関数は、入力x1, x2を受け取り、それらをまずn1とn2に通した後、それぞれの出力をn3への入力として渡すことでXORの出力を計算します。最後に、4つの異なる入力パターン(0,0)(0,1)(1,0)(1,1)に対してn関数を呼び出し、XORの真理値表に従った出力を表示します。

ポイント: XOR問題は単層のニューラルネットワークでは解決できない非線形問題として有名です。コードを通して、なぜ複数層が必要なのか、各ニューロンがどのような役割を果たしているのかを考察してみましょう。

③ニューロンの重み調整

https://trinket.io/python/b1f04a9758

2つの入力を受け取るニューロンの動作を示しています。ReLU関数は前の例と同様です。 n関数は、2つの入力x1とx2に対して、重み4と-2を掛け、バイアスは無しで計算します。その結果をReLU関数に渡し、出力を返します。プログラムでは、x1を3に固定し、x2を0から8まで変化させながら、ニューロンの出力を表示しています。このニューロンは、x1の4倍からx2の2倍を引いた値が正の場合に活性化し、出力を返します。

応用課題: コード中の重み"-2"を"-6"に変更し、出力がどのように変化するか観察してみましょう。この変更がニューロンの判断境界にどのような影響を与えるか考察できますか?

④畳み込み操作

https://trinket.io/python/3419fd07e4

3つの入力を受け取る関数cの動作を示しています。 c関数は、3つの入力x1, x2, x3に対して、重み1, 0, 1を掛け、バイアスは無しで計算します。その結果を返します。プログラムでは、0と1からなる長さ10のリストxを定義しています。その後、iを0から7まで変化させながら、xのi番目からi+2番目までの3つの要素をc関数に渡し、出力を表示しています。

実践的意義: この簡単な畳み込み操作は、実際のCNN(畳み込みニューラルネットワーク)で画像処理を行う際の基本原理です。出力結果からどのようなパターン(例:1,0,1や1,1,1)に強く反応しているか確認してみましょう。

演習の活用方法

今回の授業で学ぶ意義と満足感