元生産技術者なデータサイエンティストのメモ帳

生産技術を辞めてからデータサイエンティストになるにあたって勉強したことの備忘録とか雑記とか

G検定が機械学習初学者にも実務経験者にもおすすめできる良い資格だった件

f:id:sue124:20210718140613p:plain

こんにちは、sue124です。

最近までG検定を受験するためにその出題範囲の勉強をしたところ、

「これは初心者にも、すでにある程度実務経験がある人にもおすすめできる」

と感じたので、今回はそのことに関して書いていきたいと思います。

G検定とは

G検定(ジェネラリスト検定)とは、一般社団法人日本ディープラーニング協会が実施している、ディープラーニングを事業に活かすための知識を有しているかを確認するための試験です。

日本ディープラーニング協会のサイトでは

ディープラーニングの基礎知識を有し、適切な活用方針を決定して、事業活用する能力や知識を有しているかを検定する」

とされています。

www.jdla.org

G検定の試験では人工知能ディープラーニングに関する幅広い内容が出題されます。

以下では「初学者」と「実務経験者」に分けて、私がG検定をおすすめする理由を書いていきます。

おすすめする理由

機械学習初学者におすすめする理由

日本ディープラーニング協会は以下のサイトでG検定を以下のように定めています。

G検定は、すべてのビジネスパーソンが持つべきリテラシー

www.jdla.org

このような理念のもとで出題範囲が設定されているため、G検定の勉強をすることでビジネスにAI・ディープラーニングを適用するために必要な知識を一通り得ることができます。

その出題範囲は広く、1950年代の第一次AIブームに始まり、最新の技術トレンドや各国の政策が出題されます。

これを勉強すれば文字通り「すべてのビジネスパーソンが持つべきリテラシー」を身に付けられるので、「初学者が初手でG検定の勉強をする」というのは、非常に良い選択肢だと思います。

実務経験者におすすめする理由

G検定は実務経験者にもおすすめできます。

というのも、G検定の出題範囲は頻繁に見直されており、最新技術に関する問題もどんどん出題されます。
技術の移り変わりが早いこの業界において、これはかなりありがたいです。

最新の出題範囲(シラバス)は以下のサイトから取得できます。

www.jdla.org

2021年7月の最新版では、プルーニング、量子化のようなモデル軽量化や、OpenAI昨年発表されたGPT-3も入っており、最新の技術動向を追った上で深く勉強していないと答えられないものも含まれます。

G検定の出題範囲(シラバス)を追うことで、ある程度最新の技術動向をフォローすることができる、というのが実務経験者にもおすすめできる理由です。

すでにG検定を持っている人でも、上述のサイトの出題範囲(シラバス)を見てわからない単語があれば調べる、という使い方もおすすめです。

まとめ

今回は私が感じた「G検定の初学者にも実務経験者にもおすすめする理由」をまとめてきました。
これからも機械学習、AIに関する学習を続けていくので、定期的に他の人にもおすすめできる情報があれば定期的に発信していきたいと思います。

ここまでお読みいただき、ありがとうございました。

小型無人機(ドローン等)の飛行ルール(G検定対策)

f:id:sue124:20210709141705p:plain

こんにちは、sue124です。
久しぶりの更新です。

今G検定の勉強中で練習問題を見ているとたまにドローンの飛行のルールについて出題されることがあったので、昔某ベンチャーでドローン開発に携わっていた時に調べたことを思い出しながら、行政が定めるドローンの飛行に関するルールをまとめていきたいと思います。

1. はじめに

ドローンを飛ばすための手続きについて、まずはざっくりとポイントをまとめます。

  • 国土交通省が「飛行が制限されるエリア/行為」(申請して許可されれば飛ばせる)と「飛行が禁止されるエリア/行為」を定めている
    (試験問題になることがあるので、ここを次項で詳しく説明します)
  • 国土交通省のルールに追加して、地方自治体等が定めるローカルルールがある
     (〇〇公園はドローン飛行禁止、〇〇号線は○月○日に聖火リレーが行われるので飛行禁止、など。
      おそらくここが試験問題になることはないので、今回は省略します)

2. 国土交通省が定めるドローン飛行ルール

2-1. 飛行ルールの対象となる機体

国交省のサイトで以下のように定められています。

遠隔操作又は自動操縦により飛行させることができるもの(200g未満の重量(機体本体の重量とバッテリーの重量の合計)のものを除く)

www.mlit.go.jp

2-2. 飛行の許可が必要な空域、行為と飛行禁止空域、禁止行為

国交省の以下のサイトから引用しながら解説します。

www.mlit.go.jp

まずは「空域」に関して。
以下の図のように、3つに分類できます。

  • 安全性を確保し、許可を受けた場合は飛行可能
    (A)空港等の周辺(進入面等※)の上空の空域
    (C)150m以上の高さの空域
    (D)国土地理院の「地理院地図」で人口集中地区となっている地区の上空
  • 原則飛行禁止
    (B)緊急用務空域
  • 許可不要
    (A)〜(D)以外の空域

f:id:sue124:20210709133541p:plain

※空港の進入面は空港ごとに定められており、以下のサイトで確認できます。

www.mlit.go.jp

例えば関東近郊の地図を見ると、羽田空港や成田空港などなどの空港、飛行場の進入面が赤線で示されていることを確認できます。

f:id:sue124:20210709134429p:plain

続いて「行為」に関してです。
<遵守行為>
行為に関しては、以下が遵守すべき行為として定められています。
(申請しても免除されることがないものです)

  • アルコール又は薬物等の影響下で飛行させないこと
  • 飛行前確認を行うこと
  • 航空機又は他の無人航空機との衝突を予防するよう飛行させること
  • 他人に迷惑を及ぼすような方法で飛行させないこと

f:id:sue124:20210709135050p:plain

<事前承認が必要な行為>
また以下の行為を伴う飛行は、「事前の承認」が必要です。

  • 夜間飛行
  • 目視外飛行
  • 人(第三者)又は物件(第三者の建物、自動車など)との間が30m未満となる飛行
  • イベント上空の飛行
  • 危険物輸送
  • 物件投下

f:id:sue124:20210709135108p:plain

※余談
私は以前、某ベンチャーで「農薬を散布するドローン」の開発に携わっていたのですが、「農薬散布」は上記の「危険物輸送」と「物件投下」に該当するので、その申請をしていました。

https://www.mlit.go.jp/common/001218251.pdf

2-3. 申請先

前項で「許可、承認」が必要な飛行をする場合の申請先は、以下の通りとなります。

空港等の周辺又は地上等から150m以上の高さの空域における飛行の許可の申請(法第132条第1号の空域における許可申請): 空港事務所長 それ以外の許可・承認申請: 地方航空局長

www.mlit.go.jp

2-4. 飛行計画の登録

令和元年7月26日から、許可、承認を受けた飛行を行う前に、「飛行情報共有システム」で他の無人飛行機の飛行予定の確認と、自分の飛行情報の登録が必要となりました。

www.mlit.go.jp

3. さいごに

本記事執筆時点で国土交通省が定めている主だった飛行ルールをまとめてみました。
これからG検定を受ける人の参考になれば幸いです。
※ドローン自体がまだ発展途上の技術であり、技術の変化等に合わせてこのルールが変更される可能性があるので、実際に飛行させる場合は最新のルールを参照するようお願いします。

Azure AI Days Day2 まとめ(基調講演、MS社 自然言語処理技術 最新の動向)

f:id:sue124:20210519221701p:plain

こんにちは。sue124です。

5月20日の Azure AI Days の Day2 に出席したので、備忘録的に内容をまとめたいと思います。
長くなったので、まずは基調講演の分だけ。

Day1がビジネスリーダー向けセッションで、ノーコード、ローコードでの開発の話が多かったのに対して、2日目はデータサイエンティスト向けセッションで、技術的に突っ込んだ話が多かったです。
技術的な難しさと、参加してからブログに書くまで日が空いてしまったので、書くのに苦労しました。

実施されたSessionは、Microsoftの以下のページをご参照ください。

www.microsoft.com

1. 基調講演(MicrosoftNLP 最新動向)

Day2の基調講演は、Microsoft が取り組んでいる「自然言語処理 (NLP)」についての話でした。
細かく分けると、以下の3つのパートがありました。

  • Microsoft が取り組む NLP モデル開発
  • Bing における検索技術
  • 会話できるAI(りんな)開発

細かくみていきましょう。

1-1. Microsoft が取り組む NLP モデル開発

おなじみの「word2vec」から「Transformer」や2020年5月にOpenAIから発表された「GPT-3」までの近年の技術歩みを振り返ってから、Microsoft の最近の NLP モデル開発についての説明がありました。 まずはTuring-NLG(T-NLG)について。
T-NLG はMicrosoft が2020年2月に発表した、約175億個のパラメータを持つ言語生成ができる事前学習モデルです。

ニューラルネットワークではパラメータ数が多ければ多いほど、より複雑なものを表現できるので、パラメータ数が多ければ多いほどモデルの性能が上がります。(ただし、工夫せずにパラメータを増やすと、学習が現実的な時間で終わらなかったり、そもそもGPUのメモリ上にデータが乗り切らなかったりする)
この「175億個」というパラメータ数は、当時としてはダントツで多いモデルでした。  

f:id:sue124:20210523202656p:plain

上図は下記のサイトから抜粋したものですが、講演の中でも同じ図を使ったスライドが使われていました。

www.microsoft.com

ちなみにパラメータ数が13億を超えると、32GBのGPUを持ったメモリでもモデルが単一GPUに収まらないので、上記のサイトによると以下の方法で対処しているようです。(講演でもサラッと同様の説明がありました)

  1. We leverage a NVIDIA DGX-2 hardware setup, with InfiniBand connections so that communication between GPUs is faster than previously achieved.
  2. We apply tensor slicing to shard the model across four NVIDIA V100 GPUs on the NVIDIA Megatron-LM framework.
  3. DeepSpeed with ZeRO allowed us to reduce the model-parallelism degree (from 16 to 4), increase batch size per node by fourfold, and reduce training time by three times. DeepSpeed makes training very large models more efficient with fewer GPUs, and it trains at batch size of 512 with only 256 NVIDIA GPUs compared to 1024 NVIDIA GPUs needed by using Megatron-LM alone. DeepSpeed is compatible with PyTorch.

講演では、T-NLGの事前学習モデルを使って文章を生成するデモが流れました。
デモでは、inputとして「How was the universe created?」と入力すると、「ビッグバン」の説明を返してくれる様子が紹介されました。

上記のように175億個のパラメータで性能をT-NLGなわけですが、これを上回るパワメータ数を誇るのが先ほどチラッと話に出た、2020年5月にOpenAIから発表された「GPT-3」です。   GPT-3の事前学習モデルのパラメータ数は約1750億個と、T-NLGの10倍です。  

arxiv.org

このモデル、文章生成能力は高いのに倫理観はないことから「fake newsや差別的な表現が量産される危険がある」などの理由から、APIは公開されておらず、OpenAIに利用申請をして承認されないと使えないそうです。
利用申請にあたっては、用途を細かく回答しないといけないそうです。  

qiita.com

ちなみに先に出てきた OpenAI と Microsoft は、2019年に「コンピューティングパートナーシップ」を締結しています。  

news.microsoft.com

2020年9月には、Microsoft は GPT-3 の独占ライセンスを取得しています。

news.microsoft.com

そしてMicrosoftは目下、OpenAIと協業で「AIスーパーコンピュータ」なるものを開発しているそうです。
「AIスーパーコンピュータ」の構成は以下の通りで、「世界のスーパーコンピュータ上位5位以内」に相当する性能だそうです。
- 285,000基のCPU、10,000基のGPU
- NVLink、Infinibandによる高速通信

ここに並列分散ライブラリDeepSpeedの新バージョンを適用することによって、大規模データの高速学習が実現できるのだとか。
この「AIスーパーコンピュータ」を使って活用して作ろうとしているのが、パラメータ数がなんと1兆個の事前学習モデルとのことです。

ここで先ほどの図に GPT-3 や開発中のモデルのパラメータ数を書き加えると、以下のようになります。

f:id:sue124:20210601084436p:plain

パラメータ数のインフレが進んでいきますね💦
GPT-3ですら発表直後は業界がざわついたので、ここまで来ると世界が変わるかもしれません。
AIが書く文章のクオリティが上がったら、こうやって人間がブログを書く目的が「備忘録のため」以外はなくなったりして。。

1-2. Bing における検索技術

続いて検索エンジン Bing について。
近年の検索エンジンの主要な開発トレンドは、「雪国は誰が書いたの?」と言うような口語調の質問に対して、質問の意図を理解して回答を提示できるようになることです。
上記の質問の例だと、質問中には「筆者」という言葉は出てきませんが、「質問している人は雪国の筆者を知りたい」という意図を理解して、「川端康成」と回答する必要があります。

これに対する Microsoft の取り組みとしては、先ほども登場した Turing NLG を含む「Turing Family」と呼ばれる自然言語処理モデル群をファインチューニングすることで、検索語句の理解性能や検索結果の品質評価が可能となったそうです。 「Turing Family」に関しては以下の Microsoft のサイトに詳細がありました。

msturing.org

このサイトの「Microsoft details how it improved Bing’s autosuggest recommendations with AI」というページを開くと、近年 Microsoft検索エンジンをどう改良しているかを見ることができます。
今回の発表と関係のありそうなところだと、以下の記載があります。

For example, instead of highlighting the words “Germany” and “population” in response to the search “German population,” semantic highlighting bolds the actual figure of 81,453,631 as the population of Germany in 2019.

f:id:sue124:20210603231820p:plain

ドイツ語で「ドイツの人口」と検索すると検索ワードの意図を理解して、実際のドイツの人口にあたる数字を太字で表示してくれていますね。

このセッションの後半は、今後のさらなる性能向上に必要な「より大きなモデル」で学習、推論するための取り組みに関してでした。
これに対して Microsoft は「DeepSpeed」の新バージョンの開発に取り組んでいます。これによって分散学習を効率よく行うことができ、先のセッションで出てきた「1兆個」のパラメータを持つモデル開発を進める、とのことでした。

Microsoft は「AI の民主化」も掲げており、Pytorch のコードを数行変更するだけで使えるようになっているそうです。
あとはより速く学習、推論ができるONNX runtime を開発しているとのことでした。
(この辺は、自分の勉強不足な領域。。)
この辺の情報をキャッチアップしていきたいです。

1-3. 会話できるAI(りんな)開発

最後の基調講演は、会話できる AI「りんな」についてです。
twitter とか LINE に実際アカウントがある、あのりんなです。

f:id:sue124:20210603233817p:plain

twitter.com

今は会社が Microsoft から独立して、「rinna株式会社」が開発をしています。

corp.rinna.co.jp

このセッションの冒頭は「会話ができるAIが目指すところはなんぞや」の話で、昔からある「Turing Test」が紹介されました。
「Turing Test」に関して詳しく書くとブログ1本では収まりきらないので wikipedia のリンクを貼るに留めますが、ざっくり言うと「お互い姿が見えない状態で会話して、AIであると見抜かれずに人間と会話すること」が「会話できるAI」の基準のようです。

ja.wikipedia.org

現段階の技術で「言われた文章を理解して、返答する」ことはできていますが、「文脈を理解して、返答する」ということが厳しいようです。

この問題に対処するために、人間の会話データの一部を「文脈」、それに対する「返答」を学習させて、確率分布 p ( response | context ) を予測するモデルを作成したとのことです。

このような考え方のモデルはいろんな団体から作られており、Microsoft は DialoGPT というモデルを作ったとのことです。

arxiv.org

ただこのようなモデルでも対処しきれない問題があります。
それは「楽しそう/ 悲しそうな トーン」「フォーマル / カジュアル なトーン」のような言葉として現れない情報に対処することです。
(「今日は飲みたい」と言われても、思い悩んだ感じで言われるか、楽しそうに言われるかで、返すべき言葉は変わりますよね)

これに対応するために行われたのは「会話の流れごとにモデルを作る」ということでした。
例えば「明るい話題」「悲しい話題」......とモデルごとに学習させる話題を変える、という形です。

そしてAIが話題を理解して使うモデルを選ぶ際に、「知識探索モデル」というのが使われているそうです。
このセッションのこの辺りを聴いてる時に追いつけなかったので後で調べ直したのですが、「知識探索モデル」についてはこのサイトが分かりやすかったです。

news.microsoft.com

この「知識探索モデル」の軽量化のための取り組みとして Microsoft が実施しているのが「Low-Resource Knowledge-Grounded Dialogue Generation」(低リソースの知識に基づいた会話の生成)という取り組みだそうで、こんな論文が出ていました。(まだ全然読めてませんが)

arxiv.org

「りんな」自体の技術的な取り組みに関しては以上で、残りは「事前学習済みモデル」を使った展開に関しての紹介でした。 rinna 株式会社で「Rinna Character Platform」というサービスを展開しており、これを使うと「りんな」開発の過程でできた、会話を生成するモデルのベースとなる事前学習済みモデルに新たに作りたいキャラクターに沿ったデータを追加学習させることで、簡単に新しいキャラクターの「会話してくれるAI」が作れます。有名どころだとローソンのマスコットキャラクターのLINEボットは、これを活用しているそうです。

corp.rinna.co.jp

あとはこのサービスを活用して、こんなサービスを作ったのだとか。

www.chararu.jp

これから事前学習済みモデルでの「人間と同じように会話ができるAI」によるチャットボットが増えていきそうですね。

2. まとめ

まだ基調講演についてしか書けていないですが、内容が濃くて文章量が多くなったので、ここで一旦まとめます。

Azure AI Days の Day2 の基調講演は「自然言語処理技術」についてでした。
全てのベースとなる、モデルのパラメータ数を如何に増やすか、の話から始まり、それらのモデルを活用した検索エンジン改良や、「人間と同じように会話できるAI りんな」の開発についての講演がありました。
全体を通して、ここ最近の自然言語処理技術の動向から話が始まり、最新の取り組みまで話をしてくれたので、内容的には難しい話ではありましたが、知識がそこまで深いわけではない私でもなんとかついていくことができました。

こういう話を聞いて最新技術、動向をキャッチアップすると、学習意欲が高まりますね。 またこういう話を聞く場があれば、積極的に発信していきたいと思います。

ここまでお読みいただき、ありがとうございました。

Azure AI Days Day1 まとめ

f:id:sue124:20210519221701p:plain

こんにちは。sue124です。

5月19日の Azure AI Days の Day1 に出席したので、備忘録的に内容をまとめたいと思います。
世間でどのようにクラウドコンピューティングが活用されているかを知ることができたので、出席してよかったと感じています。
途中で仕事が割り込んできたりして一部聞き逃したところがあり、完全でないのはご了承ください。

実施されたSessionは、Microsoftの以下のページをご参照ください。

www.microsoft.com

1. 基調講演

概論的な話でした。
ためになりそうな話が多くありそうでしたが、早速仕事が割り込んできて、あまり聞けず。
『ながら』で聞いていたので正確じゃないかもしれませんが、松尾先生の「DXは既存の業務のデジタル化だけでなく、そもそもを「デジタルありき」で考えるべき」や「判断を下すトップがリテラシーを身につけて、社内のイノベーションの芽を育てられるようにするべき」というようなお話が印象に残りました。

2. Francfrancの事例紹介(ノーコード AI で実現する DX - 顧客理解が事業を成長させる -)

Azure上のAutoMLやDesignerの機能を活用することで、データ分析の専門家不在の状態でもデータ分析を半内製化できた、という事例の紹介でした。
上記の2つの機能はGUIが整っているので、専門家じゃなくても扱いやすい、というのがメリットですね。
自社ポイントサービスで、これから上位ステージに上がりそうな潜在的な「上位顧客」を見つけ出すことに成功したそうです。

この発表と同じ内容が以下のサイトにまとまっていたので、詳細が気になる方はこちらをご覧ください。

customers.microsoft.com

ここにある通り、「データに基づいた施策を打つために必要な人材がいない」状態から、「Azure Machine Learning の Automated Machine Learning(自動機械学習)機能によって、コードを記述せずとも 95% の確率で 40 万人から上位顧客会員を当てるモデルを作ることができた」この取り組みは、多くの企業の参考になるのではないかと感じました。

3. メルカリの事例紹介(画像による違反商品検知 on Azure ML Designer)

ノーコード、ローコードでAIを活用した事例。
Azure上のDesignerの機能から、PytorchのDenseNetのモデルに「違反商品かどうか」を学習させて、「違反の可能性が高い場合は、人の目でのチェックに回す」かどうかを判断してくれるシステムを作ったそうです。
これ、真面目に自分でコードを書いて実装しようとすると、下記のリンクの内容を理解しないといけないわけですが、

pytorch.org

qiita.com

AzurenoDesignerの機能を使えば、マウスだけで実装することができてしまいます。   下記のgifは厳密には「Pytorch DenseNet」のものではないですが、下記のような画面でと書かれた箱を「Pytorch DenseNet」ドラック&ドロップしてきて、データセットを示す箱と線でつなぐだけで使うことができます。  

f:id:sue124:20210519224338g:plain
デザイナー
(gifは以下のサイトから引用) docs.microsoft.com

上記のようにしてトレーニングしたモデルで、新たに出品されたモノが違反商品かどうかをバッチで判定して、「違反の可能性が高い」ものがあった場合はSlackに通知が上がって人の目で確認するんだそうです。   最後は不完全な部分を運用でカバーしている事例ですが、Designerで実装した画像分類モデルが実用に耐えらることを示す良い事例だと思います。

4. 丹青社の事例紹介(point 0 参画企業の共創を促進するコグニティブサーチを活用したナレッジマイニングソリューション)

仕事の割り込みであまり聞けず。 今まで検索しづらかった文字がアウトライン化されている画像や資料を、Azureの画像認識等を使って文字を認識して検索可能にし、ナレッジ共有できるようにしたお話だったか? 話を聞けた方がいれば、詳細教えていただけるとありがたいです。

5. カルビーの事例紹介(カルビーのデジタルマーケティングを支える Azure Cognitive Services)

「自社の懸賞応募で送られてくるデータを元にマーケティングしたいが、懸賞応募がハガキに応募券を貼って送るスタイルだったので抜本的に変えました」というお話。
色々検討して、下記リンクのようにパッケージを折ったものを写真に撮ってポイントを貯める形式にしたそうです。

www.calbee.co.jp

この話のいいところは、「製品の制約を満たしつつ、既に世の中でサービスとしてリリースされているものを活用して保守にかかる手間を抑えつつ、データの収集を行うプラットホームの構築ができた」という点です。   スライドにあったシステム構成図はPaaSで構成されており、保守コストが低そうなものでした。
システムの細かいところとしては、食べ終わったあとのパッケージを折りたたんだ時に写真に映る位置に製造番号が出てくるように印刷しておいて、Custom Vision等を使って製造番号を読み取る仕組みにしているそうです。

上記のようなシステムでデータを集められるようになり、色々マーケティングの施策を打てるようになったそうです。

6. エイベックス・デジタルの事例(Cognitive Services を活用した感情の可視化とリアルタイム演出の可能性)

エイベックスの事例は大きく分けて2つの案件に分けられます。

6−1. 観客の表情からの感情リアルタイム分析

下記リンクにあるAzure Cognitive Services の Face の「感情認識」の機能を活用して、観客の感情のリアルタイム分析をできるようになったそうです。 azure.microsoft.com アーティストが「次で最後の曲です」と言った時に悲しみの感情を示す値が一瞬上がるのを捉えられるレベルでの解析が可能なようです。
調べてみると3年前にはできていたようで、こちらの記事にまとまっていました。   japan.cnet.com

6-2. AIが解析した観客の感情から即興で演出を変える「HUMANOID DJ」

2つ目が「HUMANOID DJ」です。
1つ目の感情リアルタイム分析を土台にして、観客の反応を見ながら演出をその場応じてで変えてくれるサービスです。
HUMANOID DJは、Azure Cognitive Servicesがリアルタイムで分析した感情データを元にDJコントローラ(人間のDJも使うソフト)を制御したり、Azure IoT Hubを介して投影する色を変化させたりしているとのことです。
本事例は、以下のサイトにもまとまっていました。 ascii.jp

この事例は、AIを活用することで今までできなかったことを実現できた「まさにDX」と言える事例ですね。

7. 富士フイルムソフトウエアの事例(自社 SaaS サービスへの Azure Cognitive Services の活用事例)

最後のこの案件の時に仕事が入ってきて、ほぼ丸々聞き逃した形です。
あまりちゃんと視聴できなかったのでおぼろげなのですが、おそらく以下の事例の紹介のようです。   Azure Cognitive Servicesを使って写真の判別をできるサービスだそうで、例えばプロ野球で球団職員が撮った選手の写真に「誰が写ってるか」の仕分けの援助をやっているそうです。   ただ、Azure Cognitive Servicesの顔での人の判別は、正面を向いていないと精度が悪いので、カメラを向いていることがないプレー中の写真の仕分けに手こずっているとのこと。   顔だけでなく画像全体で判別させようとすると、背景が邪魔をしてうまくいかないという、画像解析あるあるの壁にぶつかっているようです。   技術的には、ピクセル単位で「どこからどこまでが人か?」の判別をかませれば技術的には解決するでしょう。

news.mynavi.jp

8. まとめ

ざっくりとではありますが、Azure AI Days Day 1 で紹介された事例をまとめてきました。
Microsoft Azure はノーコード、ローコードでAIを活用する基盤が整っているので、専門家がいなくてもAIを活用できた事例が多く出てきたのが印象的でした。
データサイエンティストが今ほど必要とされない日も近いかもしれません(汗

今日の昼からDay 2 があるので、こちらもまとめられればと思います。
お読みいただき、ありがとうございました。

「異常音検知の現状と展望」まとめ

こんにちは。 sue124です。

先日産総研の第46回AIセミナー「AIによる音環境理解を目的とした環境音分析」というセミナーを受けたので、それに関してまとめてみたいと思います。

第46回AIセミナー「AIによる音環境理解を目的とした環境音分析」リンク

このセミナーは2つプレゼンがありました。

今回は資料がすでに公開されている後半のプレゼン「異常音検知の現状と展望」についてをまとめます。

「異常音検知の現状と展望」資料 リンク

今回のテーマ

今回のプレゼンのゴールは「機械の異常、故障を検知するために、未知のものも含めてどうやって異常音を検知するか」でした。

機械学習に詳しい方ならお気づきかと思いますが、「未知のものも含めて」というのがこの問題の非常に難しいところです。

今回のプレゼンは「正常な状態と、未知の異常を見分けるための現状のノウハウの紹介」と言ってもいいかもしれません。

未知の異常を見分けるための方策の変遷

「異常音」というのは滅多に発生しないので、そもそも既知の異常でもデータは少ないです。 まして未知の異常に関しては、データがありません。

そのような状態に対して、以下のような方策が取られたようです。

DCASE2020以前

「DCASE2020」というコンペ以前は、以下のような方策を試したそうですが、うまくいかなかったそうです。

  • エンコードした音に対して、正常音を元通りに復元できるようにトレーニングしたエンコーダを作って、元の音とエンコードした音の差を「異常度」として異常を見分ける

 → エンコーダの汎化性能が良いと、異常音の異常度が上がらず。

  • 正常音に別の音(叩く音、擦れる音など)を足したものを「異常音」として、正常/異常を見分けるモデルを作成

 → 正常を異常と判定する誤報が増えた。

DCASE2020で出た解法

そんな中「DCASE2020」というコンペが開かれました。

このコンペは「ミニ四駆やファンなどの全個体の正常音と一部個体の異常音が与えられた状態で、異常音が与えられていない個体の正常音と異常音(未知の異常含む)を見分ける」というものです。

興味深いのは、上位チームがすべて以下のような解法に辿り着いた、というところです。

  • ある個体Aの正常音に対して、別の個体の正常音を「個体A」の異常音として、モデルを作る

イメージとしては「下図のように各個体の正常音をマッピングして、別個体の正常音は異常とする」というものです。

f:id:sue124:20210228072355p:plain

一見奇抜に見えますが、よくよく考えると合理的だな、と感じました。

「異常」を見分ける問題は、「異常と正常を分ける境界面をどうやってうまく作るか」という点に尽きます。 そしてその「境界面」をうまく引くためには「ギリギリ正常でない異常音」がないと、妥当なところに境界面を置けず、誤報や異常見逃しが増える、という自体を招きます。

それに対して「別個体の正常音をその個体の異常音とする」というのは「正常音と少ししか違わないが、人間が明確に『正常とは異なる』と明確にアノテーションできる」ものとして、最適だったわけです。

ただこの手法に問題がないわけではなく、各個体の音が違いすぎる、または違いが少ない場合は機能しないらしく、この問題にうまく対処できなかったチームがコンペでは順位を落としたそうです。

今後の展望

色々あったのですが要約すると

「DCASE2021 を今年やるからよろしく!」

とのことです。

あとは「どこで異常音が発生しているか」を判別する取り組みをやっていくそうです。

まとめ

  • 異常検知においては「正常音と少ししか違わないが、人間が明確に『正常とは異なる』と明確にアノテーションできる」データを如何にして用意できるかが大事
  • DCASE2020では、「ある個体Aの正常音に対して、別の個体の正常音を「個体A」の異常音として、モデルを作る」という解法を使ったチームが上位に
  • DCASE2021も開催されるとのこと

安定している大企業をやめてデータサイエンティストを志した経緯

こんにちは、sue124です。
この1月にデータサイエンティストへの転職を果たしましたので、今回は私がデータサイエンティストを志すようになった経緯を書いていきたいと思います。

1. 大企業に入った経緯

まずは大企業に入った経緯から書いていきたいと思います。

高校までの私は受験勉強に明け暮れている学生でした。
今思うと「高い点を取る」ことにばかり執心していて「何のために学ぶか」という大切なことが欠落していました。
(この頃の自分を引っ叩きたい)

高校を卒業して行きたかった大学に入れたわけですが、「何のために学ぶか」が欠落していた私はすっかり向上心を失います。
かと言って大学生の間に何かやりたいことを見つけることもできませんでした。

ギリギリ留年しない程度に勉強し、あとは遊んでるというようなダメな大学生活を送っていました。

「能ある鷹は爪を隠す」とはよく言ったものですが、厳重に隠しすぎてもはやそもそも爪はなかったのではないか、という状態でした。

時間が過ぎて就職先を考えない時期が来ました。
高校時代に「物理が得意」という理由だけで選んだ物理工学科では「ものづくり」に関する知識を学ぶことが多かったので、何となく「安定しているメーカーに就職して、安定した暮らしができればいいや」というところに一旦落ち着きました。
幸い所属した研究室の推薦枠があり、希望していた企業に入ることができました。

2. 大企業に入るも「ここではやってけない」

大企業に入って経済的には安定した生活を送ることができました。
ただ学生時代に「やりたいこと」を見つけられず、自分と真面目に向き合うことを疎かにしたまま選んだ仕事は、私には合っていませんでした。

私は正直なところコミュ力が高い方ではないので、「調整」「折衝」といったものは苦手なのですが、「調整」や「折衝」が業務の大部分を占めていました。組織が大きかっただけに「調整」「折衝」に割かなければいけない労力は膨大なものでした。
技術的なことに取り組めると思っていただけに、これは入社前に想像していたこととかなりギャップがありました。


調整業務の辛かった例の1つとして、こんなことがありました。
特に私のいた会社は、その業界の景気が良かった頃に入社した世代(50歳前後)が一番社員数が多く、私が入社した頃にその世代の方々がいわゆる「担当部長(部下なし部長)」になっていて、それぞれが社内の影響力をかなり持っている状態でした。
組織が大きくて正直自分では関係部署や「担当部長」の方を全て把握できない状態だったのですが、そういった方が何か決まりかけた頃にあちこちから出てきて「俺は何も聞いていない」と言って、全てを白紙に戻して行くことがままありました。しかもそういう方々は「用があるなら担当者の方から逐一説明に来い」という感じで、協力的とは言えないスタンスであったので、かなり苦労しました。

また説明をしに行ってももらえるのは「評論」だけで、プラスになることがあまりなかったことも、徒労感を増幅させていました。


上記のようなことや、「無理難題を担当者ひとりに負わせて、周りは知らんぷり」だったり、「新入社員を全然入れてくれないのにインターンシップの受け入れは年2回(各2週間)しないといけない」などなど、理不尽なことが多くあり、モチベーションを上げられない日々が何年か続きました。

そんな時発表された会社の中期事業計画にこんな言葉が。


 _人人人人人人人_
 > 人員3割減 <
  ̄Y^Y^Y^Y^Y^Y^Y ̄


これを見て、完全に会社から心が離れました。

3. データサイエンスとの出会い

会社の中期事業計画が発表された頃、会社の上層部が世間でビッグデータの活用で成果を上げているのを見て「我が社でもビッグデータの活用を進めよう」と言い始めたのが、私とデータサイエンスとの出会いでした。

前述の通り調整業務が大半を占める仕事が合っていないと感じていた私にとって、「データ解析」「データ活用」を専門にできるデータサイエンティストはかなり魅力的でした。
私は迷わず社内で開かれていた勉強会に参加し、必要な知識を身につけて業務に活かしたそうとしました。

ただ最初は中々うまくいかないもの。初めて扱うPythonのエラーと向き合って、時間がいつもよりかかる、ということがざらに起きました。 
そして当時調整業務をかなり詰め込まれていた私に起こったことは、「上層部からビッグデータの活用が推奨されているのに、それをしようとすると『そんなことに時間を使うな』と先輩から説教される」というなんとも矛盾した事態でした。

こんなことが続いて、前述の通り会社から心が離れていた私は、「データサイエンティスト」としてのキャリアを歩むべく転職する決心をしました。

4. さいごに

こうやって言葉にして振り返ってみると「こんな決心をするなら、就職する前にちゃんと仕事の中身をちゃんと調べてから就職しろよ」と突っ込まざるをえないキャリアを歩んでますね。

このような経緯で「データサイエンティスト」になる決心をし、ベンチャー企業での全自動ドローンの試験担当を経て、今は某IT企業でデータサイエンティストをしています。
直接データサイエンティストに転職しなかったのは、いきなり未経験から転職するのが厳しかったため、これまでの生産技術の経験を活かせてデータサイエンスに少しずつシフトできる仕事を選んだためです。
(まぁこのベンチャーが色々酷かったのですが、それはまた別の話)


正直なところ新卒で入った会社は仕事が合ってなさすぎて、ストレスが酷くて鬱の一歩手前で白髪がかなり増えていたのですが、今ではそれらはなくなりました。
データサイエンティストとしてやってくには、これからも最新の技術のキャッチアップしていくために勉強し続けないといけないですが、それは全然苦ではなく、むしろ楽しみながらやってます。

データサイエンティストになるまで勉強したこと、今勉強していることも、またの機会に書いていきたいと思います。

チラシの裏の落書きみたいなモンでしたが、お読みいただきありがとうございました。

機械学習による異常検知 2−1. 1変数正規分布

どうも、sue124です。

今回は前回に引き続き書籍「入門 機械学習による異常検知」のことを書いていこうと思います。
今回は1変数の正規分布の場合の異常検知について、異常度の閾値設定するまでの数式導出と、それを使ったPythonでの異常検知をやっていきたいと思います。

1.異常検知の閾値設定までの数式導出

以前の記事で紹介した通り、以下の3ステップで異常検知の閾値設定を行います。
sue124.hatenablog.com


ステップ1:分布推定
ステップ2:異常度の算出
ステップ3:閾値の設定

以下では正常とわかっているN個のデータ D = \{ x^{(1)}, x^{(2)}, ...,x^{(N)} \} から分布推定をして、新しく観測したデータ x' の判定をするケースを考えます。
それぞれのステップを詳しく見ていきます。

1ー1.分布推定

ここではデータの性質に応じた適切な確率分布のモデルを仮定します。
今回は確率分布のモデルに、平均値を中心として左右最小な分布となっている、正規分布を仮定して進めます。
1変数の場合の正規分布の式は、平均を \mu 、分散を \sigma^{2} とすると以下の通りです。

{ \displaystyle
N (x | \mu, \sigma^{2}) \equiv \frac{1}{(2\pi\sigma^{2})^{1/2}} \exp\left(-\frac{1}{2\sigma^{2}}(x - \mu)^{2}\right)
}

正規分布の式の導出は省略します。
(書籍の付録に、ラグランジュの未乗数法を使った導出が載っています。)

次に確率分布の式に出てくるパラメータ \mu\sigma を求めます。
これらのパラメータは通常、データに対して最も当てはまりが良い値を求める(最尤推定する)のですが、今回は1変数の場合ですので、一般に知られている平均値と標本分散の式から、以下の通り求めます。

{ \displaystyle
\hat{\mu} = \frac{1}{N} \sum_{n=1}^{N} x^{(n)}
}

{ \displaystyle
\hat{\sigma}^{2} = \frac{1}{N} \sum_{n=1}^{N} \left(x^{(n)} - \hat{\mu}\right)^{2}
}

ここで ^(ハット)はデータから推定した値であるということを示します。

1ー2.異常度の算出

新たな観測値 x' の異常度 a(x') を求めます。
それにあたってまず、1で求めた確率分布の負の対数尤度を取ると、以下の通りとなります。

{ \displaystyle
\frac{1}{2\hat{\sigma}^{2}} (x' - \hat{\mu})^{2} + \frac{1}{2}\ln({2\pi\hat{\sigma}^{2}})
}

x' に依存しない第二項を無視して、式の形を整えたものを以下の通り異常度と定義します。

{ \displaystyle
a(x') \equiv \left( \frac{x^{} - \hat{\mu}}{\hat{\sigma}} \right) ^{2}
}

上式の意味を考えると、以下の通りとなります。

  • 分子は標本平均からのずれ(=分布の中心からの距離)であり、これが大きくなるほど異常度が高い
  • 分母は標本標準偏差であり、元々のばらつきが大きい場合は多少のずれでは異常度は大きくなりにくく、ばらつきが小さいと、少しのずれで異常度が大きくなる

1ー3.閾値の設定

閾値を設定するにあたって、まずは異常度  a(x') の確率分布を考えます。
ここで下記の「ホテリング統計量の分布」の定理を使うと、 N \gg 1 の場合、異常度  a(x') は自由度1、スケール因子1のカイ二乗分布に従うことがわかります。

<定理:ホテリング統計量の分布>
1次元の観測データ D = \{ x^{(1)}, x^{(2)}, ...,x^{(N)} \} が独立に同じ分布 N(\mu, \sigma^{2} に従い、新たな観測値 x' も同じ分布に従うする。
このとき、異常度  a(x') の定数倍は自由度 (1, N-1) のF分布に従う。

{\displaystyle
\frac{N-1}{N+1} a(x') \sim F(1, N-1)
}

特に、 N \gg 1 の時は、  a(x') は自由度1、スケール因子1のカイ二乗分布に従う。

{\displaystyle
a(x') \sim \chi^{2}(1, 1)
}

書籍内では、異常度  a(x') の分母と分子がそれぞれカイ二乗分布に従って、その比がF分布に従うことの証明がありましたが、ここでは省略します。

カイ二乗分布の性質は既によく知られているので、それを活用します。
Rであれば、次のコードでカイ二乗分布のグラフを描画できます。

curve(dchisq(x, 1), xlim=c(0,4))

初めてRを使ってみたのですが、たったの1行でグラフを出力できることに驚きました。
出力結果は、下図のようになります。

f:id:sue124:20210131150347p:plain
カイ二乗分布

新たに観測した値の異常値  a(x') が異常かどうかを考えるには、それを正常時の分布に照らしてどの程度「あり得ない」のかを計算する必要があります。
そのためには、「その異常値より右側の面積が全体の面積( a(x') の全区間積分)に占める割合」を求めます。
 a(x') = 2 の場合ですと、下図の赤斜線部の面積の割合を求めることになります。

f:id:sue124:20210131151950p:plain
 a(x') = 2 の場合

これによって、物理量などの特性に依存せずに客観的に異常判定の閾値を決めることができます。

ここで話を異常度の閾値の設定に戻します。
例えば、「閾値を1%値に選ぶ」場合、「赤斜線部の面積が全体の1%になるような  a(x')閾値にする」ということになります。

これで異常度がこの値より大きい場合は、それを「異常」と判定することができるようになりました。

2.Pythonでの異常検知

では上記を活かしてPythonで異常検知をしていきたいと思います。
データセットとしては、irisを使っていきます。
まずはデータを準備します。

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from scipy.stats import chi2

iris = sns.load_dataset('iris')

# 種ごとにDataFrameを分割する
setosa = iris[iris['species']=='setosa']
versicolor = iris[iris['species']=='versicolor']
virginica = iris[iris['species']=='virginica']
# setosaのデータに他の種のデータを1つずつ混入させる
df = pd.concat([setosa, versicolor.head(1), virginica.head(1)]).reset_index()
display(df.tail())

setosaのデータに他の種のデータを1つずつ混入させたDataFrameの末尾はこんな感じになっています。

f:id:sue124:20210211230144p:plain

ヒストグラムを見てみます。

plt.hist(df['sepal_length'])
plt.xlabel('sepal length (cm)')
plt.ylabel('count')
plt.show()

混入させたデータは、元のヒストグラムの山から外れた位置にいます。
※setosaデータの山が左右対象でないので厳密には正規分布を当てはめるのは本当は相応しくないのですが、正規分布以外の場合はまた別の機会に書きます。

f:id:sue124:20210211230442p:plain


データを分布推定用のものと、異常度評価用に分けて異常度を算出していきます。
異常度の閾値は1%値にすることにします。

 データ分割
df_train = df[:45]
df_test = df[45:].reset_index(drop=True)
# %%
# 異常度算出
mu = df_train['sepal_length'].mean()
s2 = ((df_train['sepal_length'] - mu)**2).mean()
a = (df_test['sepal_length'] - mu)**2 / s2

print(f'標本平均:{mu:.3g}')
print(f'標本分散:{s2:.3g}')
print(f'異常度:\n{a}')

# 閾値の設定
th = chi2.isf(0.01, 1)
print(f'カイ2乗分布による1%水準の閾値: {th:.3g}')
# %%
plt.plot(range(len(a)), a, 'bo')
plt.axhline(y=th, color='red')
plt.ylabel('anomaly score')
plt.show()

出力はこのようになり、最後に付け足した種が異なる2つがうまく異常と判別できていることがわかります。
このようにすることで異常なデータを見つけることができるので、測定ミスなどで混入した不要なデータを取り除く作業(クレンジング)に使うことができます。

標本平均:5.01
標本分散:0.129
異常度:
0     0.346715
1     0.061468
2     1.314829
3     0.649251
4     0.000960
5    30.773146
6    12.923550
カイ2乗分布による1%水準の閾値: 6.63

f:id:sue124:20210211231411p:plain

3.まとめ

今回は1変数の正規分布の場合の異常検知についてを書きました。
数式を導出し、Pythonでirisデータセットを使って、異常検知を順を追ってみていきました。
次回はこれを多変数の場合に拡張したいと思います。
お読みいただきありがとうございました。