【深層学習モデルのテスト】ニューロンカバレッジの概要

こんにちは。スキルアップAI編集部です。

深層学習モデルに対するテストは重要なテーマとなっています。ここでいう「テスト」とは、誤動作（バグ）を発見するために様々な入力を与えて動作を確認することを指します。プログラマの書いたプログラムに対してテストが必要であるのと同様に、学習済みの深層学習モデルに対してもテストが必要です。テストが不十分であることは、自動運転車の事故などのような重大な問題につながってきます。
この記事では、深層学習モデルに対するテスト手法のひとつとして、ニューロンカバレッジを用いたテストについてご紹介します。

<目次>
1.コードカバレッジとは
2.ニューロンカバレッジとは
3.まとめ
4.おわりに
5.参考文献

# 1.コードカバレッジとは
ニューロンカバレッジについて解説する前に、プログラムのテストにおけるカバレッジ（コードカバレッジ）について解説します。 カバレッジとは「網羅率」のことで、コードカバレッジとは「テストによってプログラムの振る舞いがどれくらい網羅されたか」を意味します。最も単純なコードカバレッジは「命令網羅率」というものです。これは、プログラムを構成する命令のうち、テスト入力によって何割が実行されたかを表します。

命令網羅率の例として、次のようなプログラムのフローチャートを考えます。このプログラムは、S1からS5という5つの命令、C1とC2という2つの条件分岐から構成されています。

![neuron-coverage_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/1aeba9db-a5ba-99a8-cb8a-14872531f7a7.png)
図1. プログラムのフローチャートの例

このプログラムをテストするために、2つのテスト入力を与えるケースを2パターン考えます。

**ケース1**

- テスト入力1：S1 → S2 → S4（C1、C2ともにyes）
- テスト入力2：S1 → S3 → S5（C1、C2ともにno）

**ケース2**

- テスト入力1：S1 → S2 → S4（C1、C2ともにyes）
- テスト入力2：S1 → S3 → S4（C1がno、C2がyes）

ケース1では、2つのテスト入力によってS1からS5まで全ての命令が実行されるので、命令網羅率は100%となります。
一方でケース2では、S1からS4までは実行されますが、S5が実行されませんので命令網羅率は80%となります。
ケース2のパターンだと、もしS5にバグがあった場合にそれを発見することができなくなります。

以上のことから、テストの際には命令網羅率を高めるようなテスト入力を与えなければならないことがわかります。命令網羅率が低いと、プログラムのバグを見落としてしまう危険性があります（上のケース2でのS5など）。
なおコードカバレッジには命令網羅率以外にも、条件分岐を網羅できた割合を表す「分岐網羅率」など、さまざまな指標があります。

# 2.ニューロンカバレッジとは
深層学習モデルのテストも、プログラムのテストと同様に考えます。プログラムのテストにおいてコードカバレッジを高めるようなテスト入力を与えたように、深層学習モデルのテストにおいては、モデルの振る舞いをより広く網羅するようなテスト入力を与えます。その網羅率を評価するために提案された指標が「ニューロンカバレッジ」です。ニューロンカバレッジは、コードカバレッジの考え方をニューラルネットワークに拡張したものです。

ニューロンカバレッジは「テスト入力によって活性化された（活性化関数の出力値が閾値以上になった）ニューロンの割合」と定義されます。深層学習モデルの振る舞いのパターンを、活性化されたニューロンによって測るためにこのように定義されています。テスト入力によってすべてのニューロンが一度は活性化された場合、そのモデルの全ての振る舞いが網羅された（＝ニューロンカバレッジ100%）とみなします。深層学習モデルのテストを行う際には、従来のコードカバレッジよりもニューロンカバレッジを利用する方が適切と言えます。従来のコードカバレッジを利用したテストでは、Pythonなどで書かれた深層学習モデルのソースコード自体をテストしますが、ニューロンカバレッジを利用したテストではモデル自体をテストします。

実際、ニューロンカバレッジが提案された論文であるDeepXplore(参考文献[1])の評価実験では、コードカバレッジは簡単に100%に到達したが、ニューロンカバレッジは最高でも33.1%、最低で0.3%とかなり低くなることが報告されています。
このことからも、深層学習モデルのテストはプログラムのテストよりも難しい課題であることが分かります。

![neuron-coverage_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/df18e8e0-cec3-1590-221e-d999a7426840.png)
表1. コードカバレッジとニューロンカバレッジの比較
(参考文献[1]より引用)

現段階では深層学習モデルのテスト手法に関しての定まった方法論が存在しないので、そのための研究が盛んに進められています。例えば、DeepXploreの論文では、ニューロンカバレッジを高め、深層学習モデルの様々な振る舞いを網羅するためのテスト入力を生成するアルゴリズムが提案されています。 他にも、ニューロンカバレッジをさらに拡張して、深層学習モデルのテストのためのさまざまなカバレッジを提案している研究もあります(参考文献[2])。

# 3.まとめ
プログラムと同様に、深層学習モデルに対しても十分なテストを行う必要があります。そして、テストの際にはテストの「良さ」を測るための指標が必要です。そのために、プログラムのテストではコードカバレッジというものが利用されてきました。 このアイデアを深層学習モデルに持ち込んだものがニューロンカバレッジです。
ニューロンカバレッジを利用することで、テスト入力によって深層学習モデルの振る舞いがどれくらい網羅できたかを測定することができます。

# 4.おわりに
スキルアップAIでは、関連講座として「[現場で使えるディープラーニング基礎講座](https://bit.ly/3sHRdX5)」を開講中です。
本講座は、ディープラーニングの基礎・原理を理解し、ディープラーニングを支える最先端の技術をプログラミングレベルでマスターすることをゴールとした講座です。グループワーク・ハンズオンなどを取り入れ、アクティブラーニングを実践しています。

# 5.参考文献
[1] Kexin Pei, Yinzhi Cao, Junfeng Yang, Suman Jana, et al. “Deepxplore: Automated whitebox testing of deep learning systems.” proceedings of the 26th Symposium on Operating Systems Principles. 2017.
[2] Lei Ma, Felix Juefei-Xu, Fuyuan Zhang, Jiyuan Sun, Minhui Xue, Bo Li, Chunyang Chen, Ting Su, Li Li, Yang Liu, Jianjun Zhao, Yadong Wang, et al. “Deepgauge: Multi-granularity testing criteria for deep learning systems.” Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. 2018.

# 25卒向け！AIエンジニアになるための長期インターンプログラム参加者募集中！
25卒学生向けに、AIの基礎を学びながら就活も一括サポートする無料カリキュラムを提供しています。
修了するとE資格の受験資格も獲得できるプログラムとなっています！

<img width="700" alt="長期インターン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/bfce4c26-1ebe-c54d-bacb-e804048a7a08.png">

**特長①AIエンジニアやデータサイエンティストの基礎が身に付く**
AIジェネラリスト基礎講座や機械学習のためのPython入門講座など、市場価値向上のための基礎を習得。

**特長②AI・データ分析領域の優良求人を紹介**
非公開求人や選考直結型インターンをご紹介し、早期内定の獲得をサポート。

**特長③長期インターンプログラム専用の学生コミュニティ参加可**
学生同士で就活情報をシェアしたり、学習を進めるうえでアドバイスをしあったりできるコミュニティに参加可能。

＞＞[長期インターン詳細](https://bit.ly/3pXW5JM)

☆☆☆
スキルアップAIのメールマガジンでは会社のお知らせや講座に関するお得な情報を配信しています。
配信を希望される方は[こちら](https://share.hsforms.com/1_XlReV-4Te-zcxCl9lhffA2mtef)

また、SNSでも様々なコンテンツをお届けしています。興味を持った方は是非チェックしてください♪
Twitterは[こちら](https://twitter.com/SkillupAi)
Facebookは[こちら](https://www.facebook.com/skillupai)
LinkedInは[こちら](https://www.linkedin.com/company/skillup-ai)
スキルアップAI公式YouTube AIビジネスチャンネルは[こちら](https://www.youtube.com/AIBusinessChannel)