Home

University of London / MSc Computer Science: Principles of programming(後半)

July 9, 2023

ロンドン大学で MSc Computer Science: Principles of programming モジュールを履修中。

講義内容に関して記録した個人的なスタディノートです。

全 12 週のうち 6〜12 週目の内容を記録します。(6 週目開始:2023 年 5 月 22 日 / 12 週目終了:2023 年 7 月 9 日)

...

"Shut up and get the work done."

July 8, 2023

ずいぶん昔の記事ではありますが、個人的にずっと記憶に残っている言葉です。

Talk of tech innovation is bullsh*t. Shut up and get the work done – says Linus Torvalds

Linus Torvalds believes the technology industry’s celebration of innovation is smug, self-congratulatory, and self-serving.

The term of art he used was more blunt: “The innovation the industry talks about so much is bullshit,” he said. “Anybody can innovate. Don’t do this big ’think different’… screw that. It’s meaningless. Ninety-nine per cent of it is get the work done.”

...

TypeScript: Jest でインターフェースを元にモックする書き方

June 17, 2023

全体像 #

こんな感じで、Entity、Repository(のインターフェース)、UseCase があるとします。

// This file is "entity.ts"

export default class UserEntity {
  public readonly id: string;
  public name: string;

  private constructor(params: { id: string; name: string }) {
    this.id = params.id;
    this.name = params.name;
  }

  public updateName(name: string): void {
    this.name = name;
  }
}
// This file is "repository.ts"

import UserEntity from './entity.ts';

export default interface IUserRepository {
  save(data: UserEntity): Promise<void>;
  find(id: string): Promise<UserEntity>;
  delete(id: string): Promise<void>;
}
// This file is "use-case.ts"

import type IUserRepository from './repository.ts';

export default class UserUpdateUseCase {
  public constructor(private readonly userRepository: IUserRepository) {}

  public async run(params: { userId: string; name: string }): Promise<void> {
    const user = userRepository.find(params.userId);

    user.updateName(params.name);

    await this.userRepository.save(user);
  }
}

そして、このユースケースを Jest でテストしようとすると概ね以下のようになります。

...

Apple Silicon でビルドした Docker イメージを Cloud Run にデプロイする

June 8, 2023

私はまだ Intel Mac を使っているのですが、別の Apple Silicon Mac で作業したときに遭遇したことです。

ローカルでビルドした Docker イメージを Cloud Run にあげて動かしたところ、次のエラーがでて起動できませんでした。これは Cloud Run のログに出力されたメッセージです。

...

React で Dependency injection(依存性注入)

June 6, 2023

以下2つの記事から、日本語訳で抜粋&整理していきます。

Dependency injection in React - LogRocket Blog #

プロップスで DI #

BEFORE

import { useTrack } from '~/hooks';

function Save() {
  const { track } = useTrack();

  const handleClick = () => {
    console.log('saving...');
    track('saved');
  };

  return <button onClick={handleClick}>Save</button>;
}

AFTER

...

JavaScript: もう UUID の生成にライブラリは必要ないよ

June 3, 2023

これまで UUID の生成にはこちらのパッケージにお世話になっていたのですが、

いまやブラウザでも Node でも標準でメソッドが用意されているようです。

MDN にも記載の通り、すべてのブラウザ(Internet Explorer って何?)および Node 環境で動作するため、安心して使うことができます。

...

Dart: インターフェースの定義には abstract interface を使うと良いかも?

June 2, 2023

Dart 3 になるまでの間、Dart には interface のキーワードが存在しませんでした。

インターフェースを定義したい場合は abstract キーワードが使われてきました。

abstract class Animal {
  void sound();
}

class Dog implements Animal {
  @override
  void sound() {
    print('bowwow');
  }
}

class Cat implements Animal {
  @override
  void sound() {
    print('meow');
  }
}

Dart 3 になり abstract interface という書き方もできるようになりました。より厳密に書きたいのであれば、今後はこちらの利用も検討すると良いでしょう。

...

JavaScript: ディープコピーには structuredClone() を使おう

June 1, 2023

オブジェクトをディープコピーしたい場合にこれまで使われてきた有名なテクニックは JSON.stringify()JSON.parse() を使ったものでした。

const original = { name: 'Alice', friends: ['Bob', 'Charlie'] };

// 👇
const deepCopied = JSON.parse(JSON.stringify(original));

original.friends.push('David');

console.log(original); // ['Bob', 'Charlie', 'David']
console.log(deepCopied); // ['Bob', 'Charlie']

…でしたが、いつからか標準で structuredClone() というメソッドが用意されていました。(知らなかった!)

...

ディープラーニング G 検定(2023年 第2回)受験記録まとめ

May 29, 2023

2023 年 5 月の G 検定を受験し合格しましたので、振り返り記録しておきます。

学習開始前の事前知識 #

私はソフトウェアエンジニアとして働いてはいますが、機械学習やディープラーニングについての知識はありませんでした。実際、後述するテキストを最初に読んだときはチンプンカンプンで、途中から読むのが苦痛に感じたほどです笑

...

Flutter: ウィジェットが画面に描画されるまでの流れ

May 25, 2023

Google I/O 2023 のなかで Flutter の Impeller という新しいレンダリングエンジンの紹介動画を見たときのこと。

その動画では本題に入る前に、そもそも画面描画ってどういう手順を追って実施されているのだっけ、という基本的な内容を説明してくれていて、非常に分かりやすかったのでここに記録しておきます。

...

University of London / MSc Computer Science: Applied machine learning(前半)

May 23, 2023

ロンドン大学で MSc Computer Science: Applied machine learning モジュールを履修中。

講義内容に関して記録した個人的なスタディノートです。

全 12 週のうち 1〜5 週目の内容を記録します。(1 週目開始:2023 年 4 月 17 日 / 5 週目終了:2023 年 5 月 21 日)

...

University of London / MSc Computer Science: Principles of programming(前半)

May 22, 2023

ロンドン大学で MSc Computer Science: Principles of programming モジュールを履修中。

講義内容に関して記録した個人的なスタディノートです。

全 12 週のうち 1〜5 週目の内容を記録します。(1 週目開始:2023 年 4 月 17 日 / 5 週目終了:2023 年 5 月 21 日)

...

「G 検定 Study-AI 模擬テスト」練習後まとめ

May 5, 2023

機械学習の勉強のために次の問題に取り組んだ。振り返りのために内容を補完しつつ整理しておく。


G 検定模擬テスト(約 200 題) #

  • No. 16:CNN の特性上、入力層に近い中間層は全体的な特徴を捉え、出力層に近い中間層は個別の特徴を捉える。
  • No. 28:「バッチ正規化」とは、各層において活性化関数をかける前に伝播してきたデータを正規化する処理。勾配消失問題の解決策になると考えられる。
  • No. 29:「Skip connection」とは「層を飛び越えた結合」を用いる手法。Microsoft 社の CNN 系モデルである ResNet が採用した。層が深くなっても層を飛び越える部分は伝播しやすくなり、また、様々なネットワークのアンサンブル学習にもなるため、勾配消失問題への大きな対策となった。これによって従来よりも深い層を持ったモデルを作ることができるようになった。
  • No. 40:転移学習・ファインチューニングでは、新たに追加した層とそれを含んだ全体を再学習するため、主に出力層の再学習を行なっていると見なすことができる。
  • No. 41:転移学習・ファインチューニングでは、既存モデル(=学習済みモデル)の層の学習率(=重みパラメータを一度にどの程度変化させるかを表すハイパーパラメータ)を低く設定することが多い。これによりすでに学習済みの部分の変更幅を小さくしている。
  • No. 43:データ拡張(水増し)においては、元の綺麗な画像を汚すことで、モデルのロバスト性を高める(=外部の影響によって影響されにくくする)ことを狙うことができる。
  • No. 44:バッチ正規化を用いると、(重みの更新が1度だけになるため)学習が高速になり、勾配消失問題が起こりにくくなり、初期値への依存がなくなり、過学習が起こりにくくなる。
  • No. 58, 59, 60, 61:東京大学の松尾豊准教授によると、現在巷で人工知能と呼ばれているものは様々なレベルのものが混合しており、これをレベル 1 からレベル 4 までの 4 つのレベルに分類できそうであると述べている。
    • レベル 1:学術分野としては制御工学やシステム工学に対応する、単純な制御プログラム
    • レベル 2:探索や推論を活用し、限定された環境下における問題解決を行えるプログラム
    • レベル 3:機械学習を活用し、多量のデータをもとに推論の仕組みや知識ベースが作成されているプログラム
    • レベル 4:特徴表現学習と呼ばれ、特徴量自体を学習することができるプログラム
  • No. 68:第三次 AI ブームに関して、2012 年に生じた二つの象徴的な出来事。1つは ILSVRC で Deep Learning を採用したモデルの優勝。もう1つが Google 社が大量の画像データから「猫」を抽出し、その隠れ層では猫の概念と思われる画像が抽出されたこと。これにより、コンピュータがディープラーニングにより意味を理解できたと考えられた。
  • No. 76:DeepMind Technologies(ディープマインド・テクノロジーズ)は、イギリスにある会社。2010 年に起業され、2014 年に Google によって買収された。
  • No. 88:ディープラーニングでは、特徴量を機械学習自身に発見させる「表現学習(または特徴表現学習)」が行われる。したがって、特徴量は人間が与えずとも人工知能自身が自分で発見する。
  • No. 108:「End-to-End 音声認識」は音響特徴量から音素、音素から文字列、文字列から単語列への変換をまとめて実施して言語モデルを学習するアプローチ。
  • No. 113:Define-by-Run とは、計算グラフの構築と同時にデータを流して処理を並行して実行する方式で、途中の処理結果が確認でき、デバッグが楽になるほか、データ構造によってモデルを変えやすい利点がある。
  • No. 114:end-to-end learning (端対端学習) とは、ディープラーニングにおいて、1 つの問題やタスクに対して、ネットワーク中の入力層(端)から出力層(端)までの全層の重みをいっぺんに学習する方法。
  • No. 124:「言語モデル」の本質は「過去の入力系列を利用して次回の出力単語の分布を求める確率モデル」である。
  • No. 125, 126:RNNLM モデル(Recurrent Neural Language Model)における従来型の言語生成システムでは見られなかった新たな誤動作の例
    • 過生成:入力:I have an apple and an orange/出力:私はりんごとりんごとりんごとオレンジを持っている
    • 生成不足:入力:I have an apple and an orange/出力:私はりんごを持っている
    • 原構造無視:入力:I have an apple and an orange/出力:私はりんごとペンを持っている
  • No. 127:「マルチエージェントシミュレーション」とはエージェントが多数存在して相互作用することによって生じる現象を模倣し分析しようとするもの。
  • No. 138:日本の現行法は、インターネット上のデータ等の著作物から学習用データを解析することは営利目的の場合まで含め著作権侵害には当たらないというスタンスである。
  • No. 140:発明においては、創作は「課題の設定」「解決手段候補選択」「実効性評価」の3ステップからなり、特許法における「発明をした者」は自然人に限られる。
  • No. 142, 143, 144, 145:総務省は AI の社会実装によって想定されるリスクを大きく 4 分類で整理している。分類とそのリスクの例は次の通り。
    1. AI 自身のリスク:AI のアルゴリズムがブラックボックス化し人間の制御ができなくなってしまう。
    2. AI に関わる人間のリスク:人間が AI を利用した無差別殺人を行う。
    3. 社会的負のインパクト:AI が人々の職を奪ってしまう。
    4. 法律・社会のあり方:自動運転車が引き起こした事故は誰が責任を負うのか。
  • No. 153:予測とその予想が正解かどうかの組み分けを表にまとめたものを「混同行列(confusion matrix)」という。分類問題におけるモデルの汎化性能を考える際に性能指標を算出するために利用される。これにより、正解率や適合率、再現率などを確認する。
  • No. 164:ロジスティック回帰は2値分類問題を解く。また、ロジスティック回帰では各クラスの確率も得ることができる。
  • No. 167:単純パーセプトロンはとてもシンプルであるがデータが線形分離可能ではない場合は分類できない。非線形問題が解けないことは XOR 問題と呼ばれる。
  • No. 172:機械学習をする上で難問となるのが、学習を行う際に設定せねばならない初期パラメータ、すなわちハイパーパラメータにどのような値を設定するかということである。この問題の解決を試みて様々なアプローチが取られている。
    • グリッドサーチ:適切だと考えられるパラメータを複数用意し、それらの値の組み合わせを全通り総当たりで行い、最も良いハイパーパラメータを探す方法
    • ランダムサーチ:考えられるパラメータの範囲を決め、ランダムにパラメータを組み合わせて学習させ、最も良いハイパーパラメータを探す方法
  • No. 179:決定木において「剪定(pruning)」とは、あまりに細かすぎる分類を行なって汎化性能を損なわないように、条件分岐の回数の初期値を設定することでそれを適切な回数に留める手法をいう。
  • No. 184:評価に用いられる代表的な指標のうち、再現率を用いるケースの例は、病院における疾病の診断判定である。病院の疾病診断のような見落としが許されないケースでは再現率の高さが求められる。
  • No. 185:評価に用いられる代表的な指標のうち、適合率を用いるケースの例は、e コマースによる商品のレコメンドの精度である。推薦結果がユーザーの嗜好に合致しないものをなるべく除外した方が望ましいため適合率の高さが求められる。
  • No. 191:SVM ではすべてのデータを外れ値も含め正確に分類する関数を考えると関数が非常に複雑になる。これを解消するために「スラック変数」を導入し、一部のサンプルの誤分類に寛容になることで関数を簡易化することが可能である。
  • No. 192:SVM では通常、非線形問題を解くことはできないが、「カーネル法」を用いることで決定境界を新しい空間に転写し線形にすることで、非線形問題も線形問題として解くことが可能となる。
  • No. 193:SVM でカーネル法を利用する場合は計算量が大きくなるが、カーネル関数を用いる「カーネルトリック」によって計算量を削減することができる。
  • No. 203:決定木でアンサンブル学習を用いる場合で言えば、「ランダムフォレスト」は「バギング」に、「勾配ブースティング木」は「ブースティング」にあたる。両者の違いは、複数のモデルを独立に学習させるのか、逐次的に学習させるのかの違いである。
  • No. 214:日本においては現在、高度 150m 以上の空域でドローンを飛行させる場合は許可が必要。
  • No. 215:日本においては現在、ヒト・モノから 30m 以内でドローンを飛行させる場合は許可が必要。

G 検定模擬テスト - 新シラバス対応(約 100 題) #

  • No. 4:スパースモデリングは「あらゆるものごとに含まれる本質的な情報はごくわずかである(=スパース性)という仮定に基づき、データそのものではなく同士の関係性に注目することで、少量のデータでも分析可能とする技術」のこと。これはオッカムの剃刀の「ある事柄を説明するためには、必要以上に多くを仮定するべきでない」という考え方を背景にしている。
  • No. 7:画像認識におけるデータ拡張(data augmentation)の手法の1つに「Cutout」がある。正方領域を固定値 0 でマスクする手法。マスクする領域の大きさはどのデータセットについても同一である。
  • No. 8:画像認識におけるデータ拡張(data augmentation)の手法の1つに「Random Erasing」がある。ランダム縦横比の長方形を領域をランダムな値でマスクする。
  • No. 9:画像認識におけるデータ拡張(data augmentation)の手法の1つに「Mixup」がある。2つの画像を合成して新しいサンプルを作成する。
  • No. 10:画像認識におけるデータ拡張(data augmentation)の手法の1つに「CutMix」がある。画像を2枚用意し,一つの画像からもう一つの画像へコピーする。この手法は Cutout の改良版であり、Cutout は学習に必要な情報を削っているため、その改善を図っている。
  • No. 23, 24:姿勢推定(人の頭や足、手などの関節位置を推定するタスク)モデルで有名なものが Open Pose である。手法として、まず入力画像から部位の位置の推定(S・confidense maps)と、部位の連関を表す(L・Part Affinity Fields(PAFs))を算出し、その後 S と L の集合から同じ人物の部位を組み合わせ、姿勢の状態を出力する。
  • No. 25:「Attention(アテンション)」とは、「時間の重み」をネットワークに組み込んだ機構。RNN では LSTM や(LSTM を簡略化した)GRU を利用した場合であっても1つ前の状態と新たな入力から次の状態を計算するだけであり、どの時刻の状態がどれだけ次の状態に影響するかまでは直接求めることができない。Attention は過去の各時刻での隠れ層の状態を保持しておくことで、時間の重みを考慮したモデルを実現する。Attention を使って(RNN を用いずに)並列計算を可能としたのが「Transformer(トランスフォーマー)」であり、ニューラル機械翻訳のために提案された。
  • No. 28:RNN Encoder-Decoder モデルは2つの RNN から構成され、Encoder が入力データを、Decoder が出力データをそれぞれ処理する。「Seq2Seq(sequence-tosequence)」モデルとも呼ばれる。入力が時系列データであり、出力もまた時系列データで表現したい場合に用いる。その代表例が機械翻訳。
  • No. 37, 38:音声認識エンジンの仕組みは、大まかに、元の音声データから特徴量を抽出するために、アナログ信号からデジタル信号の波形に変換(A-D 変換)し、音素(意味の違いに関わる最小の音声的な単位)の抽出やノイズ除去を行う、という流れとなる。
    • 音声は「パルス符号変調(Pulse Code Modulation, PCM)」という A-D 変換が用いられるのが一般的で、これは主に以下3つの手順を踏むもの。
      1. 標本化:アナログ信号を一定時間ごとに区切り、その値を読み込む。(サンプリングとも呼ぶ)
      2. 量子化:標本化し読み込んだ値をデジタル信号に変換できるように加工する。
      3. 符号化:量子化された値を指定された二進コードなどで符号化する。
  • No. 40:「メル尺度」は、人間が感じる音の高さに基づいた、音高の知覚尺度である。心理学者らによって提案された。例えば人間は低音域の差は見抜けくことができるが、高音域の違いを見抜くのが難しい。メル尺度も同様の考えであり、周波数が高いほどメル尺度が増加しにくくなる。
  • No. 41:N-gram は任意の文字列やテキストをいくつかの単語や文字のペアで n 個ずつ分割し、ペア内の文脈を考慮してテキストを解析する手法。1つの漢字を読み取るときに単語の前後関係から読みを解析するときなどに利用できる。
  • No. 42:BoW(Bag-of-Words)は任意の文字列やテキストに対して、記載内容の特徴を分析するため、単語の出現回数を読み取る手法。記述内容が肯定的なのか否定的なのかの判定などに利用できる。ただし、出現順序は考慮されない。
  • No. 43:「ワンホットベクトル」は、全要素のうちが 1 つが 1 で残りの成分が全て 0 で表現するベクトルのこと。
  • No. 45:自然言語処理の分野で単語の意味をベクトルで表現するモデルを「単語埋め込みモデル」という。その代表例が「word2vec」である。
  • No. 46:自然言語処理の分野で、単語とベクトルの関係を 1 対 1 で表現する考え方を「局所表現」と呼ぶ。他の概念とは完全に独立しているため、単語間の関係性をとらえることができない問題がある。ワンホットベクトルな表現がこれに該当する。
  • No. 47:自然言語処理の分野で、文字や単語をベクトル空間に埋め込み、その空間上で点として扱う考え方を「分散表現」または「単語埋め込み」と呼ぶ。他の概念と関連する場合は紐づけながらベクトル空間上に表現していく。
  • No. 48, 49:word2vec には「スキップグラム(skip-gram)」と「CBOW(Continuous Bag-of-Words)」という2つの手法がある。
    • スキップグラム(skip-gram):ある単語を与えて周辺の単語を予測するモデル
    • CBOW(Continuous Bag-of-Words):周辺の単語からある単語を予測するモデル
  • No. 51:「ELMo(Embeddings from Language Models)」は、文脈から意味を演算するモデル。多義語であったり、同じ単語でも文脈によって異なる表現を得ることができる。
  • No. 54, 55:Attention(アテンション)機構は当初、エンコーダとデコーダを橋渡しするような仕組みを持っていた。入力文(source)と出力文(target)の橋渡しに使われるアテンションを「Source-Target Attention」もしくは「Encorder-Decorder Attention」と呼ぶ。
  • No. 56:Source-Target Attention が入力文と出力文の単語感の関連度を計算したものっであるのに対し、「Self-Attention」は「入力文内の単語間または出力文内の単語間の関連度」を計算したもの。これによりその文における文脈を考慮したより適切な表現を得ることができる。また、RNN を利用した機械翻訳では、時間軸にそって順にデータを読み込む必要があったため並列処理ができなかったが、Self-Attention によって並列処理が可能になり、高速な処理が実現された。
  • No. 57:「トランスフォーマー」は従来式の RNN の代わりに Self-Attention 機構を採用したことで高速化したが、一方でその結果、語順情報を考慮することができなくなった。その対策として「位置エンコーディング(positional encoding)」付加することで、間接的に単語の位置情報や位置関係を考慮することができるようにした。
  • No. 63:主なデータセット
    • ImageNet:カラー写真のデータセット
    • MNIST:手書き数字画像のデータセット。Mixed National Institute of Standards and Technology database で MNIST。
    • GLUE:言語理解タスクのベンチマーク用データセット。General language Understanding Evaluation で GLUE。
  • No. 66:DQN(Deep Q-Network)の拡張手法として、深層強化学習を二重化することによって、偶然に行動価値が大きくなり誤った学習をしてしまう現象を防ぐ手法が「ダブル DQN(double deep q-network)」である。
  • No. 67:DQN(Deep Q-Network)の拡張手法として、行動によらず学習ができるように行動価値関数を状態と行動に分割する手法が「デュエリングネットワーク(dueling network)」である。
  • No. 68:DQN(Deep Q-Network)の拡張手法として、常にその時点で価値の高い行動をとり続けた場合に別の行動をとる可能性がなくなってしまうという問題点に対し、ネットワークそのものに学習可能なパラメータと共に外乱を与えてそれも含めて学習させていくことでより長期的で広範囲に探索をすすめることで改善するという手法が「ノイジーネットワーク(noisy network)」である。
  • No. 69:「Rainbow」は DQN、Categorical DQN、Multi-Step RL、Double DQN、Prioritized Experience Reply、Dueling Net、Noisy Net という 7 種類の手法を統合した手法である。
  • No. 70:マルチエージェント強化学習は複数のエージェントが同時に行動し、相互に影響を与える学習。例えば、あるエージェントが報酬を得た時に、他のエージェントにも間接報酬を与えることによって協調的な関係を考慮して学習を進めることができる。反対に、競争関係を考慮させることもできる。
  • No. 73:「状態表現学習」とは、環境の状態をあらかじめ学習しておくことで深層強化学習の学習効率を高める手法である。
  • No. 75:「報酬成形(reward shaping)」とは、報酬関数の設計と、それに基づいた学習で得られる方策を確認し、タスクに応じた適切な報酬関数を設計することで、学習速度を向上させること。
  • No. 76:「オフライン強化学習」とは、実世界での行動による学習は行わずに、過去に蓄積されたデータのみで学習を行う手法。例えるならば、実際にゲームをプレイすることなしに、人のプレイ動画のデータを見て学習するようなもの。オンライン学習が難しい、医療やロボティクス分野での利用が期待されている。
  • No. 77:「Sim2Real(Simulation-To-Real)」とは、シミュレーションを用いて方策を学習し、その学習した方策を現実に転移させる手法。例えばロボティクスの場合、カメラ画像やセンサデータ、ロボットの存在する空間の力学や制約をシミュレータを用いて再現することで、現実世界より低コストで学習することができる。その一方で、シミュレータと現実世界の際である「リアリティギャップ(reality gap)」によって、シミュレーションでの学習内容を実世界に転移した場合に、想定した性能が出ない可能性もある。
  • No. 78:教科学習において、「ドメインランダマイゼーション」とは、ランダム化されたプロパティを使用して様々な学習用のシミュレーション環境を作成する手法のこと。これらすべての環境で機能するようにモデルを学習させていく。
  • No. 80:「蒸留」とは、学習済みモデルに与えた入力とそれに対する出力を学習データとして新たなモデルを訓練すること。
  • No. 87:学習等に用いるデータを他者から提供してもらう場合、又は、共有する場合にはデータの利用に関して契約を結ぶ。 外部に漏洩したくない情報を扱う場合には、「秘密保持契約(NDA, non-disclosure agreement)」を課す。秘密保持契約がある者のみで営業秘密等を扱うように配慮する必要がある。
  • No. 89:学習用データ等のデータ、及び、プログラムは「特許権」又は「営業秘密」等で法的に保護されている場合がある。他者の特許発明又は営業秘密を権利者に無断で実施すると民事・刑事上の請求又は罰則を受ける場合があるため注意する。発明を特許出願をして特許権を取得して保護を図る、及び、データを営業秘密として保護を図る方法等がある。営業秘密として保護の客体となるには、有用性、秘密管理性、及び、非公知性等を備える必要がある。この3つの要件を備えれば形式や書面であるか否かを問わない。すなわち、学習用等のデータ、プログラム、データベース、仕様書、ソースコード、及び、設計図のすべてが法的な保護対象になりうる。
  • No. 90:学習用データ、プログラム、データベース、仕様書、及び、AI による成果物等のデータは営業秘密として保護されている場合がある。転職、社外への発表、販売、情報提供、又は、他者との共同開発等で営業秘密を扱う場合には、「不正競争」に該当する行為か注意する必要がある。例えば、不正競争となる行為は、不正取得、不正使用、又は、不正開示等がある。
  • No. 95:「k-匿名化」とは、準識別子(同一属性)のデータが k 件以上になるようにデータを変換することで、個人が特定される確率を k 分の 1 以下に低減して特定を困難にする匿名化技術。

「徹底攻略ディープラーニング G 検定問題集(第2版)」読後まとめ

May 4, 2023

機械学習の勉強のために次の本を読んだ。振り返りのために内容を補完しつつ整理しておく。


第 1 章:人工知能をめぐる歴史と動向 #

  • 「アーサー・サミュエル」による機械学習の定義「明示的にプログラムしなくても学習する能力をコンピュータに与える研究分野」
  • 初期の素朴な自然言語処理プログラム(人工無能)「ELIZA(イライザ)」とその後開発された「PARRY(パリー)」は、会話を行い、その記録は「RFC439」として残されている。
  • 「ニューロン」は単純な数値予測を行うことができる予測器で、ニューラルネットワークの最初単位。ニューロンでは、入力に対して、重みとバイアスに基づいて計算したあと、活性化関数もちいて出力を行う。

第 2 章:機械学習の基礎 #

  • 「クラス(パターン)分類」と「クラスタリング」を混同しないように注意。
    • クラス(パターン)分類:教師あり学習。あらかじめ設定したクラス(パターン)にデータを分類する。
      • SVM(サポートベクターマシン)
    • クラスタリング:教師なし学習。データからクラスタを抽出する。クラスタはデータから自動的に求める。
      • k-means 法、ウォード法
  • 次元削減(次元圧縮):データの情報を失わないようにデータを低い次元に圧縮する手法の総称。例えば、身長と体重から BMI(肥満度)を計算する例は「(身長、体重) -> BMI」は2次元から1次元への次元削減である。
    • 主成分分析(Principal Component Analysis, PCA):データの特徴量間の相関を分析することでデータ構造をつかむ手法。特に、特徴量の数が多い場合に、相関をもつ多数の特徴量から、相関のない少数の特徴量へと、次元削減することが主たる目的となる。ここで得られる少数の特徴量を「主成分」という。
  • 基礎集計:前処理よりもさらに前に行われる作業のこと。(平均、分散などを計算してみる、相関行列を計算してみる、など)
  • 機械学習のデータの前処理
    • 正規化(normalization):データを一定の規則に基づいて変形し利用しやすくすること。主にデータの大きさを最小 0 ~ 最大 1 にスケーリングすることを指す場合が多い。
    • 標準化(standardization):データの平均を 0、分散を 1 にすること。
  • 特徴量エンジニアリング:モデルが認識しやすい特徴をデータから作ること。例えば「カテゴリカル変数(性別、髪の色、国籍などの何らかの種類を表す変数)」をカテゴリカル変数であるとわかる形に変換(encoding)することは特徴量エンジニアリングの1つ。具体的にはたった 1 つの成分だけが 1、残りの成分は 0 という形の特徴量に変換する。この形のことを「one-hot-encoding」という。
  • 「基礎集計 -> 前処理 -> 特徴量エンジニアリング」の順に実施される。

第 3 章:機械学習の具体的手法 #

  • 回帰分析:説明変数は「手がかりとなる変数」、目的変数は「予測したい変数」。例えば、その日の気温から飲料の売り上げを予測する場合は、気温が説明変数で、売り上げが目的変数。
    • 単回帰分析:1つの説明変数から目的変数を予測する(気温から飲料の売り上げを予測)
    • 重回帰分析:複数の説明変数から目的変数を予測する(駅からの距離、築年数、部屋の広さ、から家賃を予測)
  • 相関係数:相関係数は常に -1 から 1 の間の数値を取る。1 で比例関係、-1 で反比例関係、0 は相関がないことを意味する。
  • 多重共線性:英語では multicollinearity であり、マルチコと呼ばれている。多重共線性とは、相関係数が高い(1 または-1 に近い)特徴量の組を同時に説明変数に選ぶと予測がうまくいかなくなる現象のことをいう。そのため、特徴量エンジニアリングにおいては、マルチコが発生するペアを作らないように、各ペアの相関係数を観察して特徴量を取り除く必要がある。
  • パーセプトロンは、複数の入力データ(入力信号)に対して、一つの値を出力する関数のこと。単純パーセプトロンを使って解ける問題は、直線を使って分離できるものに限られる。このような問題を「線形分離可能」という。線形分離不可能な問題は、パーセプトロンを組み合わせて多層パーセプトロンにすることで解決できる。
  • SVM(サポートベクターマシン)はマージンの最大化というコンセプトに基づくが、「スラック変数」を調整することで誤分類を許容することができる。このようなエンジニアが事前に調整する変数をハイパーパラメータという。
  • エンジニアが事前に調整するものを「ハイパーパラメータ」と呼び、学習によって最適化する変数を「パラメータ」と呼ぶ、混同しないこと。
  • kNN 法(k-nearest neighbors、k 近傍法):対象のオブジェクトデータのクラス分類は、そのデータから近い順に k 個のデータを見て、それらの多数決によって所属クラスを決定するというもの。シンプルに実装できるアルゴリズムであるが、各クラスのデータ数に偏りがあると、判定結果が不正確になりやすい。

第 4 章:基礎数学 #

  • スカラ(Scalar)、ベクトル(Vector)、行列(Matrix)、テンソル(Tensor)
  • 「スカラー」「ベクトル」「行列」の積
  • 「スカラー・ベクトル・行列・テンソル」の意味
  • 統計学は、得られているデータから法則性や知見を数学的に得る分野である。機械学習もある意味、統計学に含まれているということができる。統計学は次の2つに大別できる。
    • 記述統計:手元のデータの分析を行う。手元のデータについて、代表値を求めたり、傾向を分析するなど。
    • 推計統計:手元のデータの背後にある母集団の性質を予測する。推計統計の応用例として、選挙の得票推定、視聴率推定などがあげられる。

第 5 章:ディープラーニングの概要 #

ニューロンの模式図

...

「ディープラーニング G 検定公式テキスト(第2版)」読後まとめ

May 3, 2023

機械学習の勉強のために次の本を読んだ。振り返りのために内容を補完しつつ整理しておく。


第 1 章:人工知能(AI)とは #

1-1. 人工知能(AI)とは #

  • 専門家の間でも共有されている統一的な「人工知能」の定義は未だに存在しない。そもそも「知性」や「知能」自体の定義がないため「人間と同じ知的な処理能力」の解釈が研究者によって異なっているためである。
    • 「エージェントアプローチ人工知能」(共立出版)では、「周囲の状況(入力)によって行動(出力)を変えるエージェント(プログラム)」として人工知能を捉えている。この視点からレベル別に分類したものが以下。レベル2以降が人工知能に該当する。
      1. レベル1「シンプルな制御プログラム」:すべての振る舞いがあらかじめ決められているもの。エアコンの温度調整、洗濯機の水量調整など。
      2. レベル2「古典的な人工知能」:探索・推論、知識データを利用することで、状況に応じた複雑な振る舞いをするもの。掃除ロボットや診断プログラムなど。
      3. レベル3「機械学習を取り入れた人工知能」:膨大なサンプルデータをもとに入力と出力の関係を学習したもの。検索エンジンや交通渋滞予測システムなど。
      4. レベル4「ディープラーニングを取り入れた人工知能」:特徴量(=学習対象となるデータのうち、学習結果に大きな影響を与える要素)と呼ばれる変数を、自動的に学習するもの。画像認識、音声認識、自動翻訳、チェスや囲碁・将棋のソフトなど。
  • AI 効果:そのシステムの原理が判明すると「それは自動化であって知能ではない」と結論づけようとする人間の心理的な働きを「AI 効果」という。多くの人は、人間特有の知能であると考えていたものが機械で実現できてしまうと、それは知能ではないと思いたくなるようだ。この効果によって、時代と共に人工知能というイメージ自体が変わっているとされる。

1-2. 人工知能研究の歴史 #

  • 1946 年、アメリカのペンシルバニア大学でエニアック(ENIAC)が開発された。世界初の汎用電子式コンピュータ。
  • 1956 年、アメリカのダートマス会議においてジョン・マッカーシーが初めて「人工知能」という用語を使った。
  • 人工知能のブームの変遷
    • 第1次ブーム(推論・探索の時代:1950 年代後半〜1960 年代):推論や探索の研究が進み、特定の問題に対して解を提示できるようになった。しかし、簡単な問題(トイ・プロブレム)は解けても、現実の複雑な問題を解くことはできず、失望と共にブームは去った。
    • 第2次ブーム(知識の時代:1980 年代):コンピュータに知識を入れると賢くなるというアプローチが全盛を迎える。エキスパートシステムが多く開発される。しかし、知識を蓄積・管理する困難さが明らかになるに従ってブームは去った。
    • 第3次ブーム(機械学習・特徴表現学習の時代:2010 年〜):ビックデータと呼ばれる大量のデータを用いることで、人工知能が自ら知識を獲得する機械学習が実用化される。知識の重要な要素である特徴量を自ら学習するディープラーニング(深層学習)が登場する。ディープラーニングを用いた画像認識技術や、AlphaGo がプロ棋士に勝利するなど象徴的な出来事が多く起こっている。

第 2 章:人工知能をめぐる動向 #

2-1. 探索・推論(=第1次ブームの中心的役割) #

  • 探索木(たんさくぎ)
    • 探索木とは、計算機科学において特定のキーを特定するために使用される木構造である。その木構造が探索木として機能するために、あるノードのキーは、そのノードの左の子ノードのキーよりは常に大きく、逆に右の子ノードのキーよりは常に小さい性質が必要である。

      ...

Prompt Engineering Guide(プロンプトエンジニアリングガイド)読後整理

April 14, 2023

ChatGPT をはじめとした AI に与える命令文のことを「プロンプト」と言います。日本では「呪文」と呼ばれていることも見かけます。プロンプトによって AI が生成する回答は異なります。適切な回答を得るためには適切なプロンプトを作成する必要があります。つまりプロンプトにも良し悪しがあり、良いプロンプトを書くというスキルが存在します。プロンプトを研究・開発するプロンプトエンジニアという職業も登場してきています。

...

生成AI系のサービスをキャッチアップする

March 21, 2023

生成 AI は産業革命とまで言われています。私は Chat GPT と GitHub Copilot を日常的に(といってもライトユーザーレベルで)使っていますが、それ以外はからっきしです。しばらく自分の仕事にかまけてアンテナを張ることを後回しにしていたら世の中に置いていかれつつあったので、慌ててキャッチアップしておきます。

...

フラミンゴオンラインコーチングで英語を勉強した記録

March 1, 2023

以前に、海外大学院での勉強を検討している旨の記事を書きました。出願にあたり Duolingo English Test で要求されている点数をとる必要があります。そのためにフラミンゴオンラインコーチングというサービスを利用して学習した際の記録です。

...

TypeScript: Map/Set オブジェクトの Key/Value の型を取得する

February 28, 2023

Map/Set オブジェクトの Key/Value の型は次のようにして取得できます。

type KeyOfMap<T extends Map<unknown, unknown>> = T extends Map<infer K, unknown> ? K : never;

type ValueOfMap<T extends Map<unknown, unknown>> = T extends Map<unknown, infer K> ? K : never;

type ValueOfSet<T extends Set<unknown>> = T extends Set<infer K> ? K : never;

使用例がこちら。

const alice = { name: 'alice', age: 20 };
const bob = { name: 'bob', age: 30 };
const charlie = { name: 'charlie', age: 40 };

const map = new Map([
  ['111', alice],
  ['222', bob],
  ['333', charlie],
]);

const set = new Set([alice, bob, charlie]);

type MapKey = KeyOfMap<typeof map>; // string

type MapValue = ValueOfMap<typeof map>; // { name: string; age: number; }

type SetValue = ValueOfSet<typeof set>; // { name: string; age: number; }

GraphQL についてのスクラップブック

February 14, 2023

プロダクトへの採用を検討しつつ今回初めて GraphQL に触りました。最終的には採用を見送ったものの、今回のメモをスクラップ形式で残しておきます。

なおサーバ/クライアントともに TypeScript 上で使用することを想定しています。

...

React: Stylelint v15系を使う

February 10, 2023

React で新しいプロジェクトを作成するときに、ESLint は真っ先に導入する一方で、CSS まわりのリンターは蔑ろにしてきました。

今回はじめて Stylelint を入れてみたので、その時のメモを残します。

...

JavaScript: 小数点第何位を指定した四捨五入など

January 20, 2023

JavaScript の四捨五入・切り上げ・切り捨ては Math.round()Math.ceil()Math.floor() です。

これらのメソッドは整数を返すように作られているため、10 の位で丸めたい、小数点第 1 位で丸めたい、といったときは次のようにする必要があります。

...