まちん

主にAndroidアプリを作ってます。

ネクストスキル週次ゼミ(1月のゼミまとめ)

だいぶ遅くなってしまいましたが、、1 月のネクストスキルの週次ゼミのまとめです。

1 月は主に機械学習や、機械学習システムについて学びました。

1 月に学んだこと

第 1 週

機械学習の入門的なことを学びました。

  • 人工知能(AI)とは
    • ルールベース
    • 強い AI・弱い AI
    • フレーム問題
    • チューリングテスト
    • 中国語の部屋
  • 機械学習の概要とアルゴリズムの例
    • 教師あり学習(分類)
      • 教師データ
      • アルゴリズム
      • 学習
      • モデル
      • 推論
    • 化学習
  • scikit-learn を用いたデモンストレーション
    • ワインの例
    • MNIST の例
    • ブログの関連記事(教師なし学習)の例

ブログの関連記事の例はおもしろいなと思いました。意外と機械学習をアプリケーションに適用する例はあるなと感じました。

第 2 週

ディープラーニングについて学びました。

  • ディープラーニングの概要と、教師あり学習の復習
    • パーセプロトン
    • ニューラルネットワーク
    • ディープラーニング
  • ディープラーニングの仕組みと、デモンストレーション
    • 入力層、隠れ層、出力層
  • 知っておきたい発展的トピック
    • CNN
    • RNN
    • GAN

組み合わせる層を変えれば多くのパターンが生み出せそうだと思いました。ハイパーパラメータのチューニング方法などより学習したいと思いました。

第 3 週

機械学習システムについて学びました。

  • 機械学習システムのよくある課題と、本来必要な要素
    • データ収集
      • データレイク
      • ETL
    • 実験・学習
      • 特徴量エンジニアリング
      • 実験管理
      • リリース管理
    • デプロイ・推論
      • サービング
      • 監視
    • パイプライン
  • 典型的なデータ基盤の復習
    • データ収集
      • ETL: DB to データレイクや、DWH to データマート
        • ポーリング、更新イベント(リアルタイム性などで検討)
      • Lake Formation
      • BI
      • SQL
        • Athena
    • 実験・学習
      • 特徴量エンジニアリング
      • 実験管理
        • DVC
        • MLflow
    • デプロイ・推論
      • サービング
        • Tensorflow Serving
        • Torch Serve
        • ONNX Runtime
  • 実践的な機械学習システムの構成要素
    • XAI(Explainable AI)
    • 公平性
    • プライバシー

機械学習モデルの作成は、機械学習システムのほんの一部に過ぎず、機械学習を用いたアプリケーション、システムを作るには、アプリやインフラ周りなど、その他多くの知識が必要だと感じました。

第 4 週

受講生のアンケートへの回答の講義でした。

  • 抽象クラスとインタフェースの活用
    • フレームワークの作成
    • Strategy パターン
    • テスト、モック
    • いろいろな言語のインターフェース
      • interface 宣言
      • ダックタイピング
  • サービスクラスとデータアクセスのパターン
    • Service、ApplicationService、DomainService
    • データアクセスパターン
      • Table Data Gateway(DAO パターン)
        • DB のテーブルと 1 対 1 のクラス
      • Active Record
        • アクティブレコードパターンの実装
        • DB のテーブルと 1 対 1 で、ドメインモデル + データアクセスのメソッド。
      • Repository
        • ドメインモデルの都合でデータアクセスする
  • JavaScript におけるコールバック地獄と Promise と async/await
    • fs.readFile を使った、コールバックの例(コールバック地獄)、Promise
    • Promise 化
    • readFileSync メソッド
  • システム連携のプラクティス
    • マイクロサービスのプラクティスなど
    • どれだけお願いしやすいか
    • 同期
      • 可用性
      • キャッシュ
    • 非同期
      • キュー
    • プッシュ
      • webhook
    • プル
      • 更新頻度の調整が必要
  • サーキットブレーカの概要
    • REST や gRPC で負荷が上がったら、わざと停止する処理
    • エラーやレスポンス遅延によりそれ以上負荷をかけない
    • 実装方法
      • ライブラリ
      • 別プロセスのプロキシ
        • Envoy プロキシ。高度な手法
        • Istio や Appmesh で一元管理
  • マイクロサービスの分割と DDD
    • サイズにとらわれるな。チームで最適解を選ぶ
    • 機能中心ではなく、モデル中心に考える。
      • POA, DOA, OOA
    • DDD の境界づけられたコンテキストで分ける
    • フロントからは BFF を挟み、そこに機能を置く。裏はマイクロサービス
      • 例: 商品、注文、発送
    • マイクロサービスは実装量が増える
    • トランザクション問題

サーキットプレーカーや、マイクロサービスなどは自分がリクエストしましたが、他にも知らなかったことがあったので、聞けてよかったです。ここから必要になった時などに深掘りして学習していけそうです。

まとめ

1 月は、機械学習中心でしたが、機械学習システムを作る上では、前に学習してきたアプリケーション基盤、クラウドネイティブな設計などの話が生きてくるなと感じました。

← ホームへ