Quantcast
Channel: ALBERT Official Blog
Viewing all 191 articles
Browse latest View live

2019年度卒内定式を開催いたしました

$
0
0

こんにちは。人事の山内です。

10月1日(月)に内定者の皆さんをお迎えし、2019年度内定式を開催いたしました。
前日はあいにくの天候でしたが、当日には天候も回復し、全員出席。
今年度もその様子をご紹介いたします!
内定式ではまずALBERT経営陣より祝辞を述べました。

『新卒社員はALBERTの文化醸成を担う存在である』と社長の松本。
『目の前の壁を越えられる存在に』とエールを送りました。

2018年新卒社員の活躍と内定者への期待をデータソリューション部部長鈴木から。
入社後のイメージが具体的に沸いたのではないでしょうか。

先進技術統括兼営業推進部部長の安達からは技術力に対する貪欲さを。
今後のALBERTの技術力を担う内定者へお伝えしました。

今年は、パワーポイントを使用した自己紹介を実施しました。
皆さんそれぞれのお人柄や研究内容が伝わる自己紹介で、経営陣から笑いや質問が出る白熱ぶり。

研究内容は、千差万別。
文系、理系、学部、修士、博士卒等々…。
ALBERTには多種多様な分野出身のデータサイエンティストが在籍していますが、さらにパワーアップしそうだと実感いたしました。
これがALBERTの技術力の秘訣なのかもしれませんね。

式典後は、グループワークを実施。
ALBERTでは短期インターンやアルバイトにすでに参加している内定者も多く、
顔見知りもいますが、内定者全員が揃う場としては内定式が初めて。
…ということでしたが、ワークが始まる前から和気藹々とした雰囲気…!
3ゲームの中でグループ編成を変え、さまざまな同期とコミュニケーションをはかっていただきました!
この内容は昨年も実施したのですが、やはり年度やチームによって個性が輝きます。

結果、チームワークを存分に発揮し、皆さん優秀な成績を収められました!
今日初めて顔合わせしたとは思えない白熱ぶりと一致団結感を見て、4月からがとても楽しみになりました。

内定式の後は、今年入社の新卒社員や現役社員を含め懇親会。
昨年内定者だった先輩からのアドバイスに聞き入る内定者や、現役社員の技術力に聞き入る内定者も。
内定者のみなさんにとって、懇親と情報収集の場になっていれば幸いです!

1日盛りだくさんの内容でしたがALBERT社員にとっても刺激となる1日でした。
数ある企業からALBERTを選んでいただいて嬉しい限りです。
4月にフレッシュな皆さんがALBERT社員として入社することを楽しみにしてお待ちしています。

 

ALBERTでは2020年卒新卒採用を開始しています!2019年卒もまだまだ募集中です。
各種採用イベントにも参加予定です。ご興味のある方はぜひエントリーください。

また、2月には冬季短期インターンを実施します。ALBERTやデータサイエンティストの業務に興味がある方は業務体験ができる機会となっております。
ALBERTで一緒に働きませんか?ご応募、お待ちしております。


ALBERT社員総会を実施いたしました♪過去最多、180名超えの懇親会!

$
0
0

こんにちは!広報・PR担当の五味です。

先日、雲ひとつない快晴のなか、すでにクリスマスムードが漂っているハイアットリージェンシー東京にて、2018年度ALBERT社員総会を行いました!


第一部では、スクール形式で正社員の研修を、第二部では、ディナー形式で従業員懇親会を実施いたしました。本日はその様子をご紹介いたします。

 

第一部 正社員研修。
まずは社長の松本から、今期の振り返りと、今後の方針を。

こうして振り返ってみると、今年は体制の大幅な改編、トヨタ自動車様や東京海上日動火災保険様との資本業務提携など、1年を通してさまざまなトピックがありました。
データサイエンティストの人数は、研修中のデータサイエンティストも含めると昨年末と比べて約2倍まで増えており、今後もますますの活躍が期待されます。

上半期は「再建フェーズ」と位置付けていましたが、下半期には「成長フェーズ」となり、松本からは、ALBERTが各産業と横断的に関わることにより主要産業におけるAIアルゴリズム・データの触媒機能となることでAIネットワーク化社会を目指す「CATALYST戦略」について、改めて説明がありました。

 

その後は、各部長から各部署の振り返りと方針を。
私が所属するマーケティング部からは、現在制作中の事業紹介動画の初版がお披露目となりました。無事完成しましたらALBERTコーポレートサイトにもアップ予定ですので、皆様是非お楽しみに!

 

研修が終わり、別の宴会場に移動して、第二部は懇親会です。
第二部は、各10名ずつの丸テーブルへの着席形式で、なんと180名超えの規模で行われました!

まずは来月に予定している移転について、移転プロジェクトチームの細金から、新オフィスの紹介が。先進的で未来感のあるエントランス、データサイエンティストが働きやすい工夫が随所にされている各スペースなど、移転へのワクワクが高まる発表でした!来月の移転がますます楽しみです。

乾杯の挨拶は、2018年新卒入社の尾﨑が務めました!
そのしっかりした挨拶には、社長の松本も思わず「涙が出そう」と口にするほど。尾﨑の乾杯の合図で、素敵なディナーの始まりです!

 

前菜のタイミングで始まったのは、「ALBERTのプロジェクトチームはここが凄い!」。
各プロジェクトマネージャーによる、2018年度 取り組みプロジェクトの紹介です。
ALBERTではさまざまな分析プロジェクトが存在しますが、この日はそのなかから一部のプロジェクトについて、どのような体制で取り組みが行われているのか、ざっくり言うとどのようなことに取り組んでいるのか、簡単な紹介がありました。

高度な技術力を持つデータサイエンティストが多数集まるALBERTですが、人数も増えてきたため、このプロジェクトにはこんな技術を持つデータサイエンティストがいるんだ、あのプロジェクトはこんな体制で取り組んでいるんだ、と勉強になることがたくさんありました!随所で笑いも起こり、和やかなムードでの発表となりました☆

 

後半では、「気になる社員を調査してきました!」コーナーが。ALBERTメンバーによる、他己紹介です。
普段は真面目に業務に取り組むメンバーに、実はこんな趣味があるんだ、こんなことを考えているんだ、とたくさんの気付きと新たな発見を得られるコーナーとなりました♪
懇親会終了後には、「〇〇さん、●●が好きなんですねー!」という会話もちらほらと聞こえてきました♪社員同士の繋がりをさらに広げる、良い企画となりました。

 


今回、幹事&司会を務めた、人事の亀岡・山内、プロジェクトマネージャーの武田。
司会メンバーのおかげで、当日はたくさんの笑いに包まれた懇親会となりました☆業務と同時進行での準備、また当日の進行、本当にお疲れ様でした!

ALBERTでは、データサイエンティストを積極募集しています。
先日採用サイトをリニューアルし、また2020年新卒サイトもオープンしております。ALBERTで働いてみたい方、少しでも興味がある方は、ぜひ採用サイトをご覧ください☆

多数のデータサイエンティストが働くALBERTの新オフィス!新宿フロントタワーに移転いたしました☆

$
0
0

こんにちは!広報・プロモーション担当の五味です。

約4年間お世話になった新宿野村ビルへと別れを告げ、先日、新宿フロントタワーに本社移転いたしました!
今回のオフィス移転はデータサイエンティストの増強およびセキュリティ強化を目的としており、将来にわたるデータサイエンティストの増員に備えるため、広さはなんと2倍強に。

本日は、出来立てほやほやの新オフィスをご紹介いたします。

 

15階でエレベーターをおりると、エレベーターホールには受付電話があり、新宿野村ビルの頃と同様に、お客様のお名前が画面に表示される仕組みです。
15階はすべてALBERTエリアとなっており、ワンフロアのおかげで、社員同士コミュニケーションを取りやすい環境となっています☆


 

エントランスへ進むと、大きな画面と会社案内・パンフレットがお出迎え。
白を基調としており、清潔感と未来感がありますね。


 

エントランス入ってすぐのお客様用会議室には、以前と同じく、フィッシャー、ピアソン、ガウス、ラプラス、ノイマン…と、統計学者の名前をつけています。

こちらはフィッシャー。窓が広く、眺めが抜群。

 

ノイマンは、青を基調としたデザインです。
会議室ごとに壁や照明が異なるのもポイントです♪

 

お客様用エリアには、会議室とは別に、自由にお掛けいただけるスペースもあります。こちらのチェアはなんと「Albert」という名前の椅子だそうで、細かいところにも、移転プロジェクトメンバーのこだわりが感じられますね!

 

執務室エリアへと足を進めると、執務室の一部には、とても開けた空間が。
ランチを食べたりマッサージチェアで過ごしたり、軽いミーティングを行ったり…。さまざまな目的で使用でき、早速、社員の憩いの場となっています。

 

さまざまなタイプの机や椅子が用意されていて、各自お気に入りの場所を見つけることができますね。

 

こちらはまるでファミレスのような席。窓からは、中野・大久保方面を一望できます。

 

カフェカウンターも設置されており、ほっと一息つく空間も♪

 

ラウンジ内には、データサイエンティストが持つ先端技術やナレッジの共有を目的として週に数回行われる勉強会に使用できるミニセミナースペースがあります。

 

一方で、大規模なセミナーに使用できるスペースも。
セミナールームのガラスの向こうには、ラウンジと執務室が見えます。
こちらは今後外部の方向けのセミナーでも使用予定ですので、セミナーにお越しの際には、ALBERTのスタッフが普段どんな風に過ごしているか、ガラスの向こうをぜひ覗いてみてください♪

 

こちらのガラス壁と白い壁は取り外すこともでき、ラウンジ全体の仕切りを無くして広いスペースとして使用することも可能です。

 

執務室は、デュアルディスプレイはもちろんのこと、適度な座席間隔となっており、快適なオフィス環境です。

 

上下に昇降できるスタンディングデスクも用意されています。自由に立って仕事やミーティングができます。

 

図書ルームでは、人工知能や統計学、プログラミング関連など、社員の希望で購入した書籍が日々追加されていきます。
また、書籍を置くだけでなく、論文に集中したり業務に集中したりできるよう、自習室のような席も設けられています。

 

新宿駅方面の窓からは、以前のオフィスである新宿野村ビルがちらりと☆

 

また撮影はできないのですが、セキュリティレベルに適合した専用ルームをいくつも設置しており、多くのデータサイエンティストは専用ルームで、アライアンスパートナーとの分析プロジェクトや共同プロダクト開発等の業務を行なっています。セキュリティルームの設置により、お客様から要求されるセキュリティレベルを担保いたします。

 

今回のオフィスは、事前にALBERTスタッフへのアンケートを行ない、アンケート結果をもとに経営管理部の移転プロジェクトが短期間で作り上げました!
アンケート結果をまとめると、ALBERTスタッフの理想のオフィスデザインは、シンプルで、遊び心があり、未来的で、コミュニケーションしやすく喋りやすい空間、が多数派だったそうです。これらをすべて達成するのはなかなか難易度が高い…。また、集中したいときはどういう空間が良いかという質問には、自習室、2人席、ボックス席などなど、多数の回答が寄せられました。新オフィスの各スペースは、こうしたアンケート結果を反映したものとなっています。
移転プロジェクトの皆さん、短期間での企画・運営・移転業務、お疲れ様でした!

今後は、セミナーや採用イベントなど、スタッフ以外の皆様にもALBERTオフィスに訪れていただく機会を多数企画予定ですので、皆様ぜひ足をお運びください☆

 

またALBERTでは、データサイエンティストを積極募集しています。
新オフィスで働いてみたい方、少しでも興味がある方は、ぜひ採用サイト2020年新卒サイトをご覧ください!

名古屋オフィス(仮称)開設記念パーティーを開催いたしました♪

$
0
0

こんにちは!広報・プロモーション担当の五味です。
先日、名古屋ルーセントタワーにて、中京圏で事業を展開するお客様や人材紹介会社の方々をお招きし、名古屋オフィス(仮称)開設記念パーティーを開催いたしました!

創業から13年半、東京本社のみで全国のお客様を対象に業務を行なってきたALBERTにとって、名古屋オフィス(仮称)ははじめての東京以外の拠点となります。中京圏において、プロジェクトの円滑な遂行・データサイエンティストの採用を担ってまいります。

パーティーは、この日のために作成したオリジナルムービーで始まりました。

 

ムービーでは、事業の紹介はもちろん、近頃のトピックもいくつかご紹介しました。
こちらは、前回のブログでも紹介した移転したばかりの東京オフィスの様子です。

 

4月に正式開設する名古屋オフィス(仮称)は一体どのようなオフィスになるのでしょうか?楽しみですね!

本日は、開設記念パーティーの様子をちょっぴりご紹介いたします。

 

はじめに、代表取締役社長兼CEOの松本から挨拶を。
松本がALBERTにジョインしてからいままでの振り返りや皆様への感謝、中京圏における今後の展望など、熱く語らせていただきました。


 

今回は弊社を常日頃から支えてくださる中京圏を中心に事業を展開するお客様を多数お招きし、100名規模のパーティーとなりました!
お世話になっている皆様が一同に会すことで、普段いかにたくさんの方に支えていただいているか、ALBERTスタッフ一同改めて実感できる場となりました。誠にありがとうございます。

 

歓談をしておりますと、外もすっかり暗くなってきたタイミングで、プロダクト開発部部長の武井からチャットボットや画像認識サービスをご紹介。


 

続けて、営業推進部 マネージャーの日比生より、分析事例のご紹介をいたしました。


 

最後に、執行役員CDO 先進技術統括 営業推進部部長 安達の挨拶でパーティーは無事終了。

また、あわせて、すでに名古屋の仮オフィスにて業務を始めている営業推進部 臼田も挨拶いたしました。臼田は前職ではデータサイエンティストとして勤務しており、データサイエンスにまつわる知識が豊富にございます。AI導入・分析全般でお困りごとがございましたら、ぜひ臼田にご相談ください♪


 

お帰りの際には、お忙しい中ご来場いただいた皆様に感謝の気持ちを込めて、ALBERTオリジナルグッズをお渡しいたしました。ALBERTにしては珍しく、バッグもボックス付箋も黒色で作成。レザーのような質感でできているボックス付箋は、中の付箋を取り出すことで小物入れとしても利用できます。


 

ALBERT名古屋オフィス(仮称)の正式開設は4月を予定しています。名古屋駅から徒歩5分、地下道で駅に直結している名古屋ルーセントタワーですので立地の良さも抜群。中京圏の皆様、今後ともどうぞよろしくお願いいたします♪

ALBERTでは、一緒に働く仲間を募集しています。これから本稼働する名古屋オフィス(仮称)で働ける方も大募集!データサイエンティスト、営業担当などなど、職種問わずお待ちしております。お気になる方は、ぜひ採用ページをご覧ください。

2019年新入社員入社式を開催いたしました

$
0
0

こんにちは。採用担当の山内です。

 

年度初めの4月1日、2019年新入社員入社式を開催いたしました。

 

ALBERTは新たに14名の仲間が加わり、新卒採用としては昨年の採用数を上回り

過去最高人数となりました。

新オフィス移転後初の入社式は執務エリアを見渡せる開放的なセミナルームで実施しました。

新卒社員、社長、執行役員陣揃っての記念撮影

新たに14名の仲間を迎え、従業員一同身が引き締まる思いです。

式典の様子。

新卒社員の中にはALBERTでアルバイトをしてきたメンバーも多くいますが、

改めて正社員になるということで、喜びと緊張が入り混じった様子でした。

 

代表取締役社長兼CEOの松本より挨拶。

これからALBERTの仲間となる新卒14人へ『これからのALBERTの文化を創り、醸成していってくれることを期待しています。』とメッセージがありました。

続いては新卒社員のみなさんから決意表明!

みなさん素晴らしいスピーチでした。

式典の後は新卒社員&採用担当で昼食

入社式の緊張から一転、楽しみながらのランチとなりました。

 

ALBERTのデータサイエンティストは文理問わず様々な分野から集まった

優秀なメンバーが揃っています。

 

昨年の新卒社員同様、新たに入社した14名もこれからのALBERTで

活躍する存在になってくれること期待しています!

 

新卒社員のみなさんは、これから約2か月の技術研修に入ります。

この研修はデータサイエンティストの育成に特化したALBERT独自開発の研修プログラムを現役データサイエンティストが新卒研修向けに再構築し、さらに磨きをかけた内容です。

昨年実施した新卒社員研修のフィードバックも取り込み更に充実した研修を受けられるのはALBERTの新卒社員の特権です!

 

採用担当として、採用当初から携わったみなさんが無事入社を迎えられたという喜びと、今年の新卒社員のみなさんにとって後輩となる2020年卒社員の採用を更に頑張ろうという、二つの思いを改めて持った一日でした!

【採用情報】

ALBERTでは引き続き新卒採用を積極募集しています!

お気軽にお問い合わせください。

 

また、夏には恒例の夏季短期インターンを予定しています。

ALBERTやデータサイエンティストの業務に興味がある方は業務体験ができる絶好の機会です。

 

ALBERTで一緒に働きませんか?ご応募、お待ちしております。

 

ALBERTでは、一緒に働く仲間を募集しています。お気になる方は、ぜひ採用ページ新卒採用ページをご覧ください。

【2019年新卒入社】株式会社ALBERTに入社しました

$
0
0

こんにちは。2019年4月に新卒として入社した本山理梨子です。

りこぴんと呼ばれている人です。

入社前後のあれこれについて書きます。

入社動機

そもそも、ALBERTに興味を持ったのは、インターンがきっかけでした。

機械学習分野は専門ではなかったのですが、研究の中でデータを収集し、統計的に処理することが多くあったため、もともとデータサイエンティストの仕事に興味を持っていました。

修士1年の冬ごろ、研究と並行して就活を進める中、「機械学習 インターン 有給」みたいな雑なキーワードで検索していたところ、たまたまALBERTを見つけました。

当初、「あまり規模も大きくないし、どんな会社なんだろう?」となんとなく様子を見るつもりで面接に行ったのを覚えています。

しかし、実際に社員の方々と話してみると、想像以上に自分の研究の話を深く掘り下げて丁寧に聞いてくださった上に、社員の方々の技術レベルも高く、「ちゃんとした会社だ!」と感じることができました。

そのまま、インターンに参加しました。

インターンでは、画像の異常検知の課題に取り組みました。

課題の詳細はお話できないのですが、実案件を模した内容であったため、インターンの内容が楽しかったのはもちろんのこと、会社にはのびのびと知的好奇心を満たせる環境(いつでも社員の方々に質問できる、みんな楽しそうに技術の話をしている)があり、「こんな会社で働けたらいいな」と強く感じました。

ちなみに、インターンの懇親会で社員の方々と焼肉に行き、「何でも頼んでいいよ」という言葉の通り本当に好き勝手オーダーをしたのですが、ちゃんと内定をくれたので信用できる会社だと思いました。美味しいお肉は正義です。

というのはさておき、最終面接前に、人事の方が「インターン中のコードも全部読んだ上で採用を決めます。数学の試験の結果も加味します。」とおっしゃっていたのが、ちゃんと実力を評価してもらえていると感じられてとてもよかったです。

 

研修内容

晴れて内定をいただき、入社後は新卒研修が行われました。

私からは昨年の内容と少し内容が変わった「グループ分析演習」について書きます。

 

グループ分析演習は、研修の最後に行われる実践的な演習です。

今回は、深層学習を用いた物体検出モデルの構築を行いました。

具体的には、自動車から道路を撮影した画像データを用いて、標識を検出するモデルを作成することが課題でした。

ただし「GitHubに公開されている実装などを参考にしても良いが、物体検出部分は自分たちで書くこと」というルールがありました。

 

データの確認と前処理を行い、モデルを選択するところから作業が始まります。

まずは、物体検出系の論文をいくつか読みました。

Faster R-CNN、YOLOなど、様々ある物体検出モデルの中から、私たちのグループはSSD(Single Shot MultiBox Detector)を実装しました。

 

SSDは2016年に発表された手法です。

YOLOより検出速度が早く、Faster R-CNNと同等の精度を持ちます。

そのため、現在でもベースラインモデルとして使われることが多いようです。

よって10日間という短い期間の中でひとまずの精度を確認するためはSSDが最適と判断し、実装しました。

SSDの特徴として、階層的な特徴マップを備えており、かつアスペクト比ごとに識別器を作成するというものがあります。

そのため、様々なスケールのオブジェクトを識別でき、高い精度の検出率を達成しているようです。

実装では、検出対象の標識に合わせ、デフォルトボックスに関して工夫を行ったりと、さらなる精度向上に努めました。

 

また、演習は3~4人のグループで行いました。

私はグループでのコーディング経験がなかったので、大変勉強になりました。

例えば、gitの使い方に関して、今まで研究では書き捨てのコードしか書いたことがなかったので、「コードをきちんと管理する」ことの大切さを身にしみて実感しました。

(私が紛らわしい変数名を使ってしまったことにより、他の人の勘違いを生んでしまった…といったことがありました。)

 

グループ分析演習作業中の写真

 

グループ分析演習発表中の写真

 

入社後の生活

会社や同期の雰囲気についてですが、圧倒的な居心地の良さがあります。

例えば、上記のグループ分析演習はかなり時間が限られたタイトなスケジュールであったため、進捗が良くない状況が何度かありました。

しかし、グループのメンバーが終始冷静かつ穏やかで、人間関係で消耗する時間が全くありませんでした。

心理的安全性がとにかくすごいです。

また、ラウンジに行けばいつも誰かが声をかけてくれる雰囲気があります。

雑談をしたり、いつでもホワイトボードを前に技術トークや議論ができます。

あと余談ですが、同期とはボードゲームをしたり、謎にトランポリンをしに行ったり、謎に誰かの服をコーディネートする会が開催されたり、とても仲が良いです。

でもみんな適切な距離感を弁えている感じが私はとても好きです。

 

そして、社員の方々に、業務中に技術的な質問をして嫌な顔をされたことがありません。

それどころか、「人に説明することで自分の頭も整理されるから得だよ」と言ってもらったことさえあります。

経歴や国籍など、様々なバックグラウンドを持った人がいる上、皆がそれぞれを尊重する雰囲気があり、とても好きです。

技術職特有の女性の少なさから派生する過ごしにくさといったようなものも、今のところ感じたことがありません。

女性だからといって持てはやされることも、疎外されることもなく、一人のアナリストとして穏やかに業務を行えています。

 

また、ALBERTを就職先として検討している大学の後輩と社員紹介制度を使ってごはんをしました。

肉寿司を食べました。美味しいお肉は正義です。

後輩の近況を聞いたり、ALBERTのことやデータサイエンス業界のことを話したりと楽しい時間でした。

今度オフィスに遊びに来てくれるようです。

ALBERTでは社員紹介も積極的に行っております。

 

話が変わるのですが、新しいオフィスが綺麗でとても快適です。

デスクが広い、椅子が良い、オフィスの至る所にあるホワイトボード、快適な自習室…という感じです。

あと、仕事内容や気分に応じて社内を自由にウロウロできる雰囲気があるのも良いです。

一人で集中したいときは個人席、みんなで作業したい時はボックス席やソファー席、あとは窓に面した席(とても開放的)など使い分けができ、生産性が高められます。

なんというか、オフィス環境だけでなく、会社全体の雰囲気として、アナリストやエンジニアの生産性を最大にしようとしてくださる意向が感じられ、本当にありがたく思っています。

 

 

同期会の写真(月に1回、社員同士の親睦会に補助金が出ます)

 

まとめ

圧倒的な雰囲気の良さと、高い技術力がALBERTの魅力だと感じます。

研修が終わり、業務が始まってからも、勉強することがたくさんあって楽しいです。

ALBERTでは積極的に新卒採用/インターンの募集を通年で行っています。

興味をお持ちいただいた方はお気兼ねなくお問い合わせください。
ALBERT採用サイトはこちら

ARISE analytics社と合同で勉強会を開催しました

$
0
0

開催概要

こんにちは。データソリューション本部の川﨑・栗山です。

今回は、8/2(金)にALBERT本社で実施されたARISE-ALBERT合同勉強会の様子をレポートします。この勉強会は、ARISE analytics社と一緒に、ARISE analytics が持つビジネス×データ分析のノウハウとALBERTの強みである高度な技術力を共有し、さらに両社の技術力向上を図る趣旨で開催されました。
当日は合わせて約60名の方が集まり、会場のキャパシティを大幅に超える大盛況となりました!!

発表内容

1.会社紹介(ALBERT)
2.強化学習DQNの理論から活用まで(ALBERT)
3.会社紹介(ARISE analytics)
4.分析PJで気をつけること(ARISE analytics)

今回は第一回開催のため、各社ともはじめに会社紹介を行い、続いて代表者がLTを行う流れでした。


1.会社紹介(ALBERT)

はじめに、弊社データソリューション本部 本部長の鈴木からALBERTの会社紹介が行われました。
【要旨】—————————————————————

・ALBERTの成り立ち:
 2005年にネットリサーチ会社インタースコープからレコメンデーション部門が独立する形で誕生。

・事業概要:
 AI活用コンサルティング
 ビッグデータ分析
 AIアルゴリズム構築とシステム開発・運用
 AIを用いた独自プロダクトの提供
 データサイエンティストの育成支援

・事業トピックス:
 2018年にトヨタ自動車株式会社、東京海上日動火災保険株式会社、KDDI株式会社と資本業務提携を行なった。

———————————————————————-

恥ずかしながら、会社設立の経緯では知らなかったことも多く、なるほど〜となりました。当初はレコメンデーション専門企業であった弊社が技術力を高めていき自動運転やチャットボットなどの様々なソリューションを提供するようになった経緯に、内部の人間ながらベンチャー企業の変化の速さをしみじみと感じました。


2.強化学習DQNの理論から活用まで(ALBERT)

続いて、弊社データサイエンティストの葉より「強化学習DQN(Deep Q Network)の理論から活用まで」というテーマでLTを行いました。
強化学習とは、ある環境にあるエージェントが現在の状態から取るべき行動を決定する問題を扱う機械学習手法の1種です。囲碁のプロ棋士を破ったAlphaGoや近年話題の自動運転に使われている技術ですね。

【要旨】———————————————————–
・ 強化学習の基礎理論
・ 深層学習を取り入れた深層強化学習
・ 実務への応用例:
 強化学習の技術を実装することで従来の手法より効率的な業務プロセスの提案に成功した。
———————————————————————-

強化学習の理論周りが凝縮されており、とても内容の濃い発表でした。PJに適用した際の解説もあり、理論の解説にあったアルゴリズムが実務で適用された際の結果なども興味深かったです!


3.会社紹介(ARISE analytics

続いてARISE analytics COOの古結様から会社紹介をしていただきました。
【要旨】—————————————————————
ARISE analyticsは2017年にKDDI株式会社が保有する4000万の契約データとAccenture株式会社が持つアルゴリズム構築力を背景に設立。
主な事業内容は以下の4つ。
 ・ KDDIコンシューマ事業分析
 ・ ソリューション開発・提供
 ・ データ分析環境の構築・運用
 ・ データサイエンティスト育成

1つ目のコンシューマ事業分析は、ARISE analyticsの中心事業としてKDDIのデータ・ドリブン経営の下支えをしている。
外部の分析組織として関わる事で、部署を横断した横串の業務改革の提案を行いやすい点が利点。また、独自採用による人材の確保が可能となった。

ただし事業戦略との連携が困難になるため、会議体の設計を工夫する事で経営層のコミットを得るようにしている。
———————————————————————-

事業部門と密にコミュニケーションをとることで地道に知見を貯めていき、それらを用いて経営層に認められるアウトプットを出すという過程は、分析組織の成功例として勉強になりました。他にも ARISE analytics の成り立ちにまつわる分析組織の設計の話など勉強になるお話ばかりでした。


4.分析PJで気をつけること( ARISE analytics

最後に、 ARISE analytics 瀧内様より、分析PJで気をつけることを Analytics Delivery Division Unit Leadである自身の経験に交えて発表いただきました。
【要旨】—————————————————————
分析PJがうまくいかない主要因4つとその対策

・ 情報不足
対策:たくさん話す。クライアントから収集したい情報・分析側から提供すべき情報を可能な限り事前に整理・準備し相談内容に対して多角的に情報を収集する。

・曖昧な方向性
対策:めっちゃ考えて整理する。とにかく考え、構造化して曖昧な点を残さないように整理する。分析側で決めきれない点も、いくつかのオプションでたたき台を作り、決めてもらう。

・ 硬直的な進め方
対策:柔軟に進める。Agile的に都度方向修正を心がけ、小さくて良いのでQuickにPoCで結果を出してクライアントとの成功体験を築き、Backup-Planとしてアクション失敗時の手を考えておく。

・ 作業の属人化
対策:標準化する。環境の統一・コーディングのルール作成・ドキュメント整備をルール・仕組み化する。
———————————————————————- クライアントとコミュニケーションを取る前にPJについて考えられる点は考え尽くすという姿勢が印象的でした。
また、一方で分析結果やクライアントの状況による分析方針の変化は予測できないことも多いため、都度方向性を修正することも重要とのことでした。

作業の属人化に向けた対策はPJの進行・チームの拡大に伴い必要となりますが、気が付いた時には手遅れになっている事もあるため、事前に実行可能な形で仕組みを考えておかなければと感じました。(私はこの辺りが不得手なため、苦笑いしながら聞いていました。)

懇親会

発表後は、立食形式で懇親会を行い、盛んに交流が行われました。開催後のアンケートでは懇親会の時間をもっと長くしてほしいとのコメントも多く、有意義な時間となりました。

おわりに

ALBERTでは毎週いくつもの社内勉強会が開催されていますが、会社の垣根を超えて勉強会を共同で開催することは初めての試みでした。ARISE analyticsの方々の協力のもと、大盛況のうちに終了することができました。参加していただいた皆様、ありがとうございました。
ALBERTのデータサイエンティストは、業務時間をつかって勉強会や案件共有会、また各自の技術力向上のための取り組みを行うことが推奨されており、150名以上のデータサイエンティストが積極的に各自の知見を共有が行なわれています。
今回の合同勉強会の実績を踏まえて、今後も社内外での技術力向上に向けて取り組んでいきたいと思います。

滋賀大学彦根キャンパスで特別講義を実施しました。

$
0
0
滋賀大学特別講義TOP
2019年8月28日から30日までの3日間、滋賀大学彦根キャンパスでデータサイエンス学部、経済学部在籍の学生の方々を対象に、滋賀大学と連携した特別講義「作って学ぶ機械学習」で、ニューラルネットワークの仕組みや実装方法について当社データサイエンティストが講義を行いました。

ALBERTでは、ビジネスに即したデータ活用スキルやデータサイエンティスト育成のノウハウ・講座実施の実績を活かして、学生が実践的なデータ活用方法や分析手法等を学べる機会を提供しています。

今回、その取り組みの一環として、滋賀大学と連携して特別講義を実施しました。1日6時間、3日間で合計18時間の集中講義形式で行い、学部生や修士の方々合わせて約20名が参加しました。


講義の様子とアジェンダ

滋賀大学特別講義1
滋賀大学特別講義2
「作って学ぶ機械学習」という易しそうなテーマ名に反してかなり本格的な内容で行われた今回の特別講座。内容は座学と演習に分かれ、前半はニューラルネットワークの歴史から始まり、基礎的な数学的理論や計算方法、アルゴリズムの理解等を行い、後半は実際にPythonを用いてニューラルネットワークを自ら実装する演習を行いました。

演習では、みなさん黙々とプログラミングに取り組んでおり、時折講師やスタッフに質問をしたり、学生同士で確認し合ったりして試行錯誤する姿が見られました。

———————-

今回行われた講義内容

# 1日目 ニューラルネットワークとはなにか

### 座学

#### はじめに
– ニューラルネットワークとその歴史
– ニューラルネットワークにできること
– ニューラルネットワークの学習

#### 微分のおさらい
– なぜ微分? (ニューラルネットワークにおける微分の役割 とか?)
– 一変数関数の微分 (関数の極限・連続性、微分可能性 など)
– 多変数関数の微分 (連鎖律、写像、勾配 など)

#### 計算グラフ
– 式を計算グラフで表現する
– 順伝播・逆伝播
– 自動微分

### 演習

#### プログラミングの準備
– 基本的なPythonの使い方
– 関数・クラスの作り方

#### 計算グラフと自動微分の実装
– 変数、関数をそれぞれクラスとして実装する
– 変数は値と grad, backward メソッドを持つ
– 関数は forward メソッドと backward メソッドを持つ
– 変数は自分を生成した関数ノードを、関数ノードは自分の入力になった変数を覚えておく
– Backward が呼ばれると後ろから前に勾配を伝播させていく



# 2日目 計算グラフと自動微分の実装 ()

### 演習 (1日目の演習の続き)

#### 関数近似をおこなう
– 損失関数の概念の導入
– 三次関数を二次関数で近似するとどうなるか (表現力不足)
– 二次関数を三次関数で近似するとどうなるか (過学習)

### 座学

#### はじめに
– 知的タスクのモデル化、関数近似
– 関数を構造とパラメタに分解する
– 勾配法によるパラメタ推定

#### 一層ニューラルネットワーク
– 一層ニューラルネットワーク
– Softmax関数
– W, bの説明
– Linear Layer

#### 多層ニューラルネットワーク
– 多層ニューラルネットワーク
– 活性化関数の種類とその使い分け
– 多層ニューラルネットワークの表現力

#### ニューラルネットワークの訓練
– 損失関数
– 損失関数の設計の重要性
– 最急降下法
– 確率的勾配降下法
– 誤差逆伝播法
– 過学習と汎化

### 演習

#### 手計算してみる
– W, b, xの勾配の計算
– 活性化関数の導関数の算出

#### 多層ニューラルネットワークの実装とMNISTの識別
– 線形変換や活性化関数を関数ノードとして実装する
– 実装した関数ノードを用いてニューラルネットワークを作成する
– MNISTを用いたニューラルネットワークの訓練



# 3日目 ニューラルネットワークの実装 ()

### 演習

#### 解説
– 実装例の解説
———————-

講義を終えて

講義後に参加者に実施したアンケートでは、全体の内容の理解度が「まあまあ理解できた」が47%、「あまり理解できなかった」が47%と同数という結果になりました。やはり多層ニューラルネットワークの実装の工程はみなさん理解が大変という方が多かったようです。

フリーコメントでは、
「今までニューラルネットワークはライブラリーを使っていたので、理論は知っていてもその中身がブラックボックスであったので、今回の講義は非常に為になりました。」
「概念や考え方はよく分かりました。アルゴリズムやプログラミングの実装が難しかった。」
「まさかパッケージを使わず実装できるとは思わなかったので実装できてよかった。」
「こうやってできてるんだ、と分かっただけでも収穫になりました。不明な点は今後も自分で学習していこうと思います。」
といったご意見がありました。

滋賀大学特別講義3
また、今回の講義を企画から一緒に作っていただいた滋賀大学データサイエンス学部教授の河本先生からは、「Pythonのライブラリーを使わずゼロからニューラルネットワークのアルゴリズムを作る演習を通し、ライブラリーをブラックボックスで使う場合と比べて深く理解できているという自信を持てるようになりました。受講した学生にとって、貴重なことを学ぶ機会をいただけたと思います。」とのコメントをいただきました。

今回の講義では、ALBERTと滋賀大学の双方、そして参加いただいた学生の方々にとっても有意義な時間にすることができました。ALBERTでは今後も、急拡大するビジネスでのデータ活用需要に向けたデータサイエンティスト育成が急務という社会的な課題に、実用的な育成ノウハウの蓄積を活かし、インターンシップの受け入れや大学での講座実施等、積極的な産学連携を推進していきます。

特別講義集合写真

さいごに

ALBERTでは、2021年卒の新卒採用およびデータアナリストのアシスタントとして短期インターンやアルバイトの募集も行っています。実際の現場でデータ分析に関わる仕事を経験してみたい、または当社にご興味をお持ちの方は、ぜひ採用サイト(https://www.albert2005.co.jp/saiyo/)からご応募ください。


2020年度新卒社員内定式を実施しました。

$
0
0
2019年10月1日、東京本社で2020年度新卒社員内定式を行いました。
今年は30名以上の内定者が集まり、皆さん少し緊張した様子のなか内定式が始まりました。

■内定式

・社長祝辞
「この度は内定おめでとうございます。同時に、数ある企業の中から当社を選んでいただき、お礼申し上げます。社会におけるAIの状況について、当社の見解をお伝えしたいと思います。

今はAIバブルといわれ、強いデマンドを受けている状況で、当社は特にこの2年間で国内トップクラスの成長性を実現できていると自負しています。

理由はいくつかありますが、まず、内部アセットが蓄積できる業界(自動車、製造、金融、通信、流通)に注力している点です。現在売上高の約85%がこの注力業界のプロジェクトで占めるようになりました。最近は各業界のリーディングカンパニーとの資本・業務提携もあり、メディアでも取り上げられるなど事業を拡大しています。

それから、基本的な戦略が他社とは少し違っていて、当社は「社会実装」に強いこだわりを持っています。ですので、売れそうな技術があっても、それに一点集中をするということはしません。派手さはなくても各産業のコア部分に携わっていく会社です。数年後には各産業トップから、AIといえばALBERTと言ってもらえるようになれると思っています。

さらに、昨年発表した『CATALYST(触媒)戦略』というものがあります。これまで1,000近いプロジェクト経験から、単体の企業の持つデータだけでは付加価値創造は難しいということが言えます。そこで、各社のデータを結合させ、両者の付加価値を上げていくことが重要と考え、業務提携なども推進しています。すでに実績もできています。今後もそういったデータ結合で共通化されるアルゴリズムあるいは共有されるナレッジをアセット化してロイヤリティに変えていくビジネスモデルを描いています。

私たちはこの先5年で日本だけでなくアジアや世界でどんなポジションをとっていくのかを考えています。これからAIベンダーが大きく淘汰される時代が来ると思われる中、従来のようにクライアントが持っている課題に対して応えるだけでなく、クライアントも認識していないような課題を発見しその解決方法を提案し主導していくような役割が求められているのではないかと考えています。第二創業期である過渡期に入社される皆さんにおいては、テクノロジーオリエンテッドだけではなく論理力、人間力、表現力が求められます。皆さんはすでに論理力は素晴らしいと思うので、これからクライアントをリードしていく仮説検証力、考案力といった「表現力」を身に着けていただきたいと思います。そしてそれを支えるのは人間力です。

入社後はまずは研修を受けていただいて、一日でも早く実業務に慣れていただくというのはもちろん、会社がどんな戦略で動いているのかを、「論理力、人間力、表現力」の体得と併せてインプットしていってもらいたいと思います。 当社はフラットな組織として役職等によって情報格差がないように心がけています。みなさんも論理力、人間力、表現力をもって積極的に発信していってください。

それでは、来年4月に皆さんにお会いできるのを心待ちにしています。この度は誠におめでとうございます。」


・経営陣からのメッセージ
続いて、執行役員データソリューション本部長の鈴木、執行役員CDOマーケティング本部長の安達より、それぞれ祝辞が送られました。


・自己紹介
その後、内定者の皆さんによるこれまでの研究内容や経歴、趣味などの自己紹介が行われました。内容はもちろん、発表スタイルなどにも個性があり、それぞれ印象に残る自己紹介でした。


■グループワーク

内定式後は、7チームに分かれてグループワークを行いました。すごろく式のゲームとグループディスカッションを通じて、職場で働くイメージを理解し、社会人としてのキャリアについて考えるきっかけとしてもらいました。
前半は、就職後~3年目までの新卒期をモデルにしたすごろく式ゲームをグループで行います。想定以上に盛り上がりを見せていました。

後半は、その体験内容を個人ワークとグループワークで深めてゆきます。

グループワークの結果は、それぞれのチームの代表者が発表しました。
テーマは「新人期を一言でまとめると?」。各チームすべて違う答えでしたが、それぞれの個性が出ていて、また、良く議論されていました。



■懇親会

内定式、グループワークが無事終了し、最後はケータリングを準備して社内で先輩社員を交えての懇親会を行いました。(もちろんお酒もバーテンダーさん付きでしっかり用意しました!)

内定者の皆さま、当日は長い時間お疲れさまでした。
初めは緊張した様子でしたが、それぞれの個性が伝わる自己紹介を経て、グループワークでは打ち解け、会話が盛り上がっていました。また、懇親会では社員に気になることを直接聞けたことで、社会人として自分が働くイメージをより明確にできたのではないでしょうか。

まだ少し先ですが、来年4月から一緒に働けるのを社員一同、楽しみにしております!


■さいごに

ALBERTでは、2021年卒の新卒採用および冬季インターン(短期)やデータアナリストのアシスタントとして長期インターン・アルバイトの募集も行っています。実際の現場でデータ分析に関わる仕事を経験してみたい、または当社にご興味をお持ちの方は、ぜひこちらからご応募ください。

先進技術セクション新設と研究プロジェクトリーダー募集開始のお知らせ

$
0
0
こんにちは、先進技術セクションでマネージャーをしている筒井です[1]。 大学院で博士号を取得し、東京大学のビッグバン宇宙国際研究センターでおよそ3年間宇宙物理の研究に従事した後、ALBERTに2015年10月に入社しました。ブログに顔と名前が掲載されるのが 恥ずかしいため逃げ続けていましたが 、4年経って、今更ながら覚悟を決めての公式ブログ初登場です。今回は、ALBERT内で先日新設された先進技術セクションの紹介と、研究プロジェクトリーダー募集開始のお知らせをしたいと思います。

イントロダクション

このブログの読者の方はご存知の方も多いと思いますが、ALBERTは
ビッグデータアナリティクス領域においてデータソリューション事業を展開しています。コアとなるアナリティクステクノロジーを用いた「AI活用コンサルティング」「ビッグデータ分析」「AIアルゴリズム構築とシステム開発・運用」「AIを用いた独自プロダクトの提供」等を通じて、より良い社会の実現を目指しております。また、国内においてデータサイエンティストが圧倒的に不足している現状を改善すべく、これまでに培ったノウハウを元に「データサイエンティストの育成支援」を行なうことで、データ活用のプロフェッショナル人材育成に貢献します。弊社HPより
というビジネスをしている会社です。要するに、様々なお客様からデータ分析やAIについてのプロジェクトを受託し、アルゴリズム構築とシステム開発・運用 とデータサイエンティストの教育をしています。

私は大学時代から統計解析は研究でも使っていたものの、機械学習については素人同然でした。しかし、入社後に深層学習や隠れマルコフモデル、ベイズ最適化などの技術を身につけ、弊社主要取引先の一つであるトヨタ自動車の案件を始めとして、多種多様な業界のお客様のビジネス課題を解決すべく仕事に取り組んできました。また、受託分析プロジェクト通して身につけたノウハウを、より多くのクライアントに活用してもらうために、プロダクトである「タクミノメ」のプロトタイプの開発にも携わりました[2] [3]

このようにALBERTは、深層学習をはじめとする先端技術を受託の分析プロジェクトに取り入れ、技術力を磨いてきたわけですが、受託プロジェクトである限り、 予め定められた期間での開発となるため、ある程度保守的にならざるをえません。また、高い技術力を持っていても、プロジェクトの守秘義務契約上、それを社外にアピールすることも難しいというのも現状です。そこで、将来のためにしっかりした技術開発と技術PRのために新しくできたセクションが本日ご紹介する先進技術セクションです。

以下の節では先進技術セクションと、新しく募集を開始した研究プロジェクトリーダーについてそれぞれ紹介します。

先進技術セクションとは

この節では、先進技術セクションがどんなところか知ってもらうために、先進技術セクションの新設の経緯、構成員であるリサーチャーの人物像、リサーチャーへ期待されることについて説明します。今回募集を開始した研究プロジェクトリーダーはリサーチャーの上位職になります。

先進技術セクションは、(ALBERTでは創業以来初の)自社技術の研究開発を専門に行う組織となります。先進技術セクションができる以前にも、研究開発を行う組織はありましたが、それは受託プロジェクトのため、もしくは特定の製品開発のための組織でした。私のこれまでの大学での研究や4年間のALBERTでの経験から、これでは大胆な挑戦をし、まだ世にないような新しいものを作り会社の非連続成長に向けた種まきをするのは難しいという思いから、会社の上層部を説得して、自由な挑戦の場として新設したのがこのセクションです。

ALBERTに所属する技術者は、ほとんどがアナリストかエンジニアという職種ですが、先進技術セクションの構成員は主にリサーチャーという職種になります。リサーチャーには、アナリストのように与えられた課題を既存の手法を用いて解くのではなく、自ら課題を発見し、手法自体も新しく作り出すことが求められます。不確実性の高い中でも、trial & errorを繰り返し、ALBERTの事業に貢献する成果を出すタフさが必要です。人事評価も、他の職種と比較してスキルよりも実績に重きを置いた評価となります。

セクション新設の経緯にも書いたように、先進技術セクションでは失敗を恐れずに挑戦し、将来の非連続成長につながるような成果を出すことが求められます。そのような成果を出すことはもちろん容易なことではありませんが、必要な条件は技術者が自身の強い欲求に従い、範囲を限定しない広い視野を持ち、主体的に行動することだと考えています。そのために、研究計画はセクションのメンバー各自が主体的に、会社の中長期計画に沿って、他部署のメンバーとも積極的に議論しながら立てられます。保守的な研究よりも、社会の課題に直結した困難なテーマへの挑戦を歓迎します。現在は重点研究領域をロボティクスと設定していますが、この研究領域も年単位で見直され、将来は変わる可能性もあるため、新しい分野に素早くキャッチアップするスキルが求められます。

研究プロジェクトリーダーの募集

先進技術セクションを新設して、現在は主に研究環境を整えるのに注力していますが、本格的に先進技術の研究開発に投資をしていくために、リサーチャーの募集に先立って研究プロジェクトリーダーを募集しています。研究プロジェクトリーダーはALBERTで唯一の博士号取得(分野不問)が条件の職種で、先進技術セクションのリサーチャーの業務に加えて、研究開発に関して技術面でのマネジメント[4]とリサーチャーの教育をしていただきたいと考えています。

ALBERTは現在を第二創業期と位置付けて、 会社予想でおよそ売上がおよそ2年で3倍を達成する見込みという成長を遂げており、データ分析や人工知能に関するクライアントからの生の課題が日本で最も多く集まる企業の一つと言っても過言ではありません。また、ALBERTには統計学やコンピューターサイエンスなどの分野のみならず、様々な分野で学位を取った多様なメンバーが働いており、活発に勉強会などを開いて知識の共有を行っています。このようにユニークな環境の中で自身の裁量を持って研究計画の立ち上げから関われるこの機会に、ぜひ一緒に挑戦したいという方からの応募をお待ちしております。

最後になりましたが、ALBERTではリサーチャーや研究プロジェクトリーダー以外にも、様々な職種で積極募集中です。皆様のご応募をお待ちしています。


[1] 先進技術セクションの他にも品質管理部というところでもセクションマネージャーを兼務しており、こちらも今年の初めに新設されたばかりです。 [2] このようにALBERTでは、プロジェクトで得られたノウハウを元に、独自の自社プロダクトの開発もしています。 [3] 最近もタクミノメへの新しい判断根拠可視化機能の追加をしたのですが、それはまた別の機会にお話したいと思います。 [4] 技術面以外のマネジメント業務は私が担当します。私ももっと研究したい…。

Graph Neural Networkの化学分野への応用

$
0
0
みなさんこんにちは。先進技術セクションでアルバイトをしている三瓶です。
今回は Graph Neural Network (GNN) の化学分野への応用について紹介します。
近年 GNN に関連する論文は増加しており、化学分野への応用を念頭に置いた研究も数多く見受けられる中で、私の専門分野である化学のドメイン知識を用いてこれらを捉え直すことを試みました。

本記事では、まず化学物質(化合物)のグラフ表現とその妥当性を整理し、次にドメイン知識を GNN に組み入れた際の精度改善について紹介します。

初めに

この章では化合物について考える前に、前提となる GNN およびグラフについて説明します。

・Graph Neural Networkとは
Graph Neural Network とは、入力としてグラフを受け取るようなニューラルネットワークのことです。詳しくは弊社データ分析基礎知識”GCNs (Graph Convolutional Networks) とは”をご覧ください。

グラフとは
グラフとは頂点 (node, vertex) と辺 (edge) の集合で構成されるデータ構造であり、辺により頂点間の連結関係が示されます。グラフの頂点や辺には何らかの情報を付加することができます。この情報を重みと呼び、頂点や辺に長さ、コスト等を持たせることが出来ます。例えば、電車の路線図は駅を頂点、路線を辺としたグラフということができます。この時、乗り換えアプリでは路線図の頂点に乗り換え時間を、辺に所要時間や運賃を重みとして置き、出発地から目的地までの重みの合計が最小になるような経路を探索していると捉えることができます。
辺は2つの頂点を結びますが、同一の頂点を結ぶループ構造を持つこともでき、複数の辺が同じ2頂点を結ぶこともできます(多重辺)。また、辺に向きが存在するようなグラフを有向グラフ、向きが存在しないようなグラフを無向グラフと呼びます。
図1に無向グラフを、図2に重み付きの有向グラフを一例として示します。

  図1 無向グラフ              図2 有向グラフ


・グラフの行列表現
ニューラルネットワークに入力するために、グラフを何らかの形で表現する必要があります。この表現としてはよく行列が用いられます。
グラフの情報を表す行列としては次数行列と隣接行列が知られています。
ある頂点について辺を通して結ばれている頂点の個数をその頂点の次数といい、この次数を対角成分とした対角行列を次数行列と呼びます。また、ある頂点と別の頂点について辺で結ばれているか否かを表す行列を隣接行列と呼びます。例えば、図1についての次数行列 (D: Degree matrix) と隣接行列 (A: Adjacency matrix) はそれぞれ次のようになります。

D = \left(\begin{array}{rr} 1 & 0 & 0 & 0 & 0 & 0 \\\\ 0 & 3 & 0 & 0 & 0 & 0 \\\\ 0 & 0 & 1 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 3 & 0 & 0 \\\\ 0 & 0 & 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 0 & 0 & 1 \end{array}\right), A = \left(\begin{array}{rr} 0 & 1 & 0 & 0 & 0 & 0 \\\\ 1 & 0 & 1 & 1 & 0 & 0 \\\\ 0 & 1 & 0 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & 0 & 1 & 1 \\\\ 0 & 0 & 0 & 1 & 0 & 0 \\\\ 0 & 0 & 0 & 1 & 0 & 0 \end{array}\right)

辺に重みの付いているグラフの時は隣接行列の成分は辺の重みになり、有向グラフの際は行が辺の出て行く頂点、列が辺の入る頂点に対応します。この時、図2の次数行列と隣接行列はそれぞれ次のようになります。

D = \left(\begin{array}{rr} 2 & 0 & 0 & 0 & 0 \\\\ 0 & 3 & 0 & 0 & 0 \\\\ 0 & 0 & 2 & 0 & 0 \\\\ 0 & 0 & 0 & 2 & 0 \\\\ 0 & 0 & 0 & 0 & 1 \end{array}\right), A = \left(\begin{array}{rr} 0 & 3 & 0 & 2 & 0 \\\\ 0 & 0 & 5 & 0 & 7 \\\\ 0 & 0 & 0 & 0 & 0 \\\\ 0 & 0 & 4 & 0 & 0 \\\\ 0 & 0 & 0 & 0 & 0 \end{array}\right)


化合物のグラフ表現とその妥当性

前章では GNN とグラフ及びその行列表現について説明しました。
この章では GNN の入力として化合物の構造を考え、化合物をグラフとする際にどの様な特徴が現れるかを考察します。

・化合物のグラフ化
そもそも、化合物をグラフとして扱うためには化合物とグラフの変換ができる必要があります。化合物をコンピュータで扱う際には SMILES 記法により化合物を表し、文字列として扱うことが一般的です。SMILES 記法は化合物の構造を記述するための記法で、1)異性体を区別できる表記方法を持っている 2)芳香環は単結合と二重結合の組み合わせとは区別される 3)水素原子は原子価の足りない原子に暗黙的に結合していると考え明記しない と言った特徴があります。GNN への入力は一般に SMILES 記法をグラフ化することで作成します。

・化合物とグラフの対応関係
化合物は原子を頂点、結合を辺とするグラフで表すことができます。この時、化学的な性質を考慮すると、頂点および辺は以下の様な表現となると考えられます。
まず、頂点(原子)について考えます。この時、原子番号は頂点の種類と捉えるべきだと考えられます。原子の性質は原子番号と対応する一方、比例するものではありません。よって、原子番号を one-hot vector のように扱う方が頂点の重みと捉えるよりも化合物の特徴を反映させやすくなると考えられます。
次に、辺(結合)について考えます。結合は方向性もループも持たないのでグラフはループのない無向グラフであることがわかります。また、結合次数は辺の状態としてグラフに組み入れる必要があります。SMILES 記法では水素原子を省略するため、原子の種類と原子同士の結合の有無のみでは化合物を一意に定めることができません。例として、図3に結合次数を考慮しない窒素とヒドラジンを示します。
図3 結合次数を考慮しない窒素とヒドラジン
辺の状態の表し方としては1)結合次数を多重辺として表す 2)結合次数を辺の重みとして表す 3)結合次数を辺の種類として表す の3種の方法が考えられます。しかし、1)については芳香環の結合を整数本の多重辺として表すことができないという欠点があります。芳香環の結合は単結合と二重結合の中間的な結合であることが知られているため、1.5重結合の様な小数を用いた結合次数とすることが適当と考えられるためです。2)については結合のエネルギーや結合距離等の結合次数と相関のある特徴量を暗に含有できるという利点がある一方、芳香族に特有な置換反応の起こりやすさの様に結合次数に相関のない性質を表せないという欠点があります。3)については結合次数を区別して学習を進めるため特徴量をその傾向によらず無理なく抽出できる一方、辺の種類ごとの演算によりパラメータや計算量が増えることが懸念されます。実用の上ではタスクやモデルに応じて2)と3)を使い分けるべきだと考えられます。
最後に、グラフ全体について考えます。グラフ構造は頂点間の繋がり方を表す構造ですので、結合(=辺)の存在しない部分の情報は保持されません。例えば幾何異性体や立体異性体はグラフ化すると同じグラフとなってしまうので判別不可能となります(立体異性は辺の有無や結合次数は等しく、複数の原子の立体的な配置が異なることにより起こります。頂点の立体的な配置の情報はグラフでは保持されません。) 。これらの区別を行うにはグラフ内で既存の頂点と辺の関係を崩さずに異性体の区別をつけられる機構を導入する必要があると考えられます。それに加えて、原子間に結合のない Zeise 塩のような化合物はグラフ化できないため、通常グラフで表せないような結合を表すことのできる機構も導入する必要があると考えられます。

既存研究やその実装では化学のドメイン知識が一部使われているものの、まだ完全にドメイン知識が駆使されているとは言い難いものが多く存在しています。以上のようなドメイン知識を用いてグラフやモデルの改良を行うことで GNN はより高い精度を出せる可能性があると考えられます。

実験

前章では化合物をグラフとした際のグラフの特徴や辺と頂点の表し方、グラフ化で失われる情報を考えました。
この章では前章の考察を基にドメイン知識の有用性を実験にて確かめます。GNN の1つである Neural Finger Print (NFP) というモデルを実装し、NFP に改良を加えたものと精度の比較を行います。

・Neural Finger Print(NFP) とは
今回、私は Neural Finger Print(NFP)[1] という手法に注目し、公開されている既存実装に改良を加えました。既存実装としては Chainer Chemistry のものを用いました。
NFP は官能基の存在の有無により化合物同士の類似度を判定する手法である Circular fingerprints[2] を微分可能に一般化し、ニューラルネットワークを導入したもので、シンプルで理解しやすいアルゴリズムです。
Circular fingerprints は化合物中の各原子について隣接する原子の情報を集めることを繰り返すことで検索対象の官能基が存在するか否かを判別する手法です。
図4 Circular fingerprintsの模式図(カルボキシ基の炭素を例に)
NFP においても、ある原子について隣接した原子およびその原子自身の情報の足し合わせを繰り返すことで近傍の原子の情報を集めます。
図5 水素を考慮しないジエチルエーテルの酸素におけるNFPの模式図
このような情報の集約を全原子について行い、それらの情報から予測値(特徴量)を数値ベクトルとして得ます。
ベースである Circular fingerprints では官能基の有無を予測しますが、一方で NFP では特徴量を予測するため、回帰や分類などの様々なタスクに用いることができます。

・NFP のアルゴリズム
NFP の具体的なアルゴリズムは図6に示す通りです。f, r, v, i はベクトル、H, W は学習可能な行列です。また、青字は Circular fingerprints との変更点を示します。
図6 NFPのアルゴリズム[1]
ここで、H は (atom features の個数 × atom features の個数 ) という形の行列、Wは (atom features の個数 × fingerprint vectorの次元数 ) という形の行列です。また、H は (radiusの大きさ) × (次数の最大値(図6では5としています。)) 個、W は (radiusの大きさ) 個用意します。

・NFP アルゴリズムの2つの解釈
図6のアルゴリズムの7番目の”原子 a に隣接する原子の数 N”の数え方は1)原子 a と繋がっている原子の個数 2)原子 a が辺を通して繋がっている頂点の数 という2通りの解釈が可能です。この2つの解釈は一見同じに見えますが、例えば二酸化炭素の炭素原子を原子 a として考えたときに1)では2つの酸素原子が炭素原子に繋がっているので N は2つとなりますが、2)では各炭素-酸素間の結合は二重結合で多重辺となっており、炭素原子は各酸素原子と2つの辺を通して繋がっているので、N は4つとなります。
このように多重辺が存在するときに2つの解釈には差が生まれますが、SMILES 記法においては水素原子を明記せず、特徴量の計算でも水素は用いないため1)では単結合の時と区別がつかなくなってしまいます(二酸化炭素に対してメタンジオールは同じ予測値が得られます)。
一方、2)の場合も二酸化炭素とオルト炭酸の区別がつかないように思われます。しかし、層を二層以上にすると異なる予測値が得られます。例として二層の時を考えます。最終層ではどちらの炭素原子にも酸素原子4つの特徴量ベクトルが足されますが、一層手前で1つの酸素原子に足される特徴量ベクトルがメタンジオールでは炭素原子1つ分、二酸化炭素では炭素原子2つ分となるため、最終層で炭素に足される炭素原子の特徴量ベクトルの数は異なります。この違いについて、簡単のために二酸化炭素の片方の酸素のみに対しての違いを模式化した図を図7に示します。
図7 隣接する原子数Nの解釈の違いと区別の有無
このように1)で区別できない多重辺の有無も十分な層の深さを確保した下で2)を使用することにより区別が可能となります。
NFP の論文中でははっきりとどちらの解釈をとっているかは述べられておらず、Chainer Chemistry での NFP の実装(以下、Chainer Chemistry 版と呼びます。)では1)の解釈を採用しています。ですが、上に述べたように1)では多重辺の識別ができなくなってしまいます。そこで、2)を使用した NFP (以下、改良版と呼びます。) を実装し、2つのモデルの精度を比較することでドメイン知識に基づいてアルゴリズムの解釈を変えた際の予測精度への影響を実験、考察しました。

・NFPの実装
実装した NFP での Chainer Chemistry 版と改良版の変更点はアルゴリズムの解釈です。具体的な実装の内容及び違いとしては以下の様になります。Chainer Chemistry における NFP の実装はグラフの行列表現を入力として受け取るため、この行列表現部分を変更しました。
Chainer Chemistry 版の NFP では隣接する原子及び原子自身の特徴量ベクトルの足し合わせを行う vrai (図6のアルゴリズムの8番目)において、化合物を重みのないグラフと見たときの隣接行列の対角成分を全て1とした行列(以下 A’ と置きます。)と全原子の特徴量ベクトルを集めた行列(以下 R’ と置きます。)の積 (R’A’) を取っています。
ここで、例として簡単のために二酸化炭素について考えます。各行列の1,3列目が酸素を、2列目が炭素を表す (隣接行列の行についても同様の対応関係があります。) とすると R’ と A’ 及びそれらの積は次の様になります。

R' = \left(\begin{array}{rr} \bf r_1 & \bf r_2 & \bf r_3 \end{array}\right), A' = \left(\begin{array}{rr} 1 & 1 & 0 \\\\ 1 & 1 & 1 \\\\ 0 & 1 & 1 \end{array}\right)

R'A' = \left(\begin{array}{rr} \bf r_1 + \bf r_2 & \bf r_1 + \bf r_2 + \bf r_3 & \bf r_2 + \bf r_3 \end{array}\right)

上の結果より、R’A’の各原子に対応する列ベクトルに注目すれば、確かに隣接原子及び原子自身について、特徴量ベクトルの和が取れていることが分かります。
一方で改良版では、化合物とグラフの対応関係の辺についての考察の “2) 結合次数を辺の重みとして表す” を採用し、隣接行列の重みに結合次数を用いることでアルゴリズムの解釈の “2) 原子 a が辺を通して繋がっている頂点の数” を実装しました。この様な隣接行列を Cheiner Chemistry 版の隣接行列の代わりに用いました。Chainer Chemistry 版と同様に改良版の R’, A’, R’A’ を考えると以下の様になります。

R' = \left(\begin{array}{rr} \bf r_1 & \bf r_2 & \bf r_3 \end{array}\right), A' = \left(\begin{array}{rr} 1 & 2 & 0 \\\\ 2 & 1 & 2 \\\\ 0 & 2 & 1 \end{array}\right)

R'A' = \left(\begin{array}{rr} \bf r_1 + 2\bf r_2 & \bf 2 \bf r_1 + \bf r_2 + 2\bf r_3 & \bf 2\bf r_2 + \bf r_3 \end{array}\right)

上の結果より、R’A’ の各原子に対応する列ベクトルに注目すれば、確かに隣接原子及び原子自身の特徴量ベクトルについて、結合次数に応じた重み付きの和が取れていることが分かります。

・実験方法
本実験は複数のモデルにおける精度の比較がなされている Graph Warp Module(GWM)[3] の論文と同じ条件で行いました。この論文では NFP を含む GNN モデルの実装として Chainer Chemistry を用いており、この論文の結果と比較することで Chainer Chemistry 版の再現実験の妥当性を保証することができます。
実験条件は次の通りです。
  • データセット: QM9[4,5]
  • 使用ラベル: 計12種類[5]
    • mu; Dipole moment (D)
    • alpha; Isotropic polarizability (a03)
    • homo; Energy of Highest Occupied Molecular Orbital (Ha)
    • lumo; Energy of Lowest Unoccupied Molecular Orbital (Ha)
    • Gap(lumo-homo) (Ha)
    • r2; Electronic spatial extent (a02)
    • zpve; Zero point vibrational energy (Ha)
    • U0; Internal energy at 0 K (Ha)
    • U; Internal energy at 298.15 K (Ha)
    • H; Enthalpy at 298.15 K (Ha)
    • G; Free energy at 298.15 K(Ha)
    • Cv; Heat capacity (cal mol-1 K-1)
  • 損失関数: Mean Squared Error (MSE)
  • Optimizer: Adam (α=0.001, β1=0.9, β2=0.999) [6]
  • 層の数(R): 5
  • 特徴ベクトルの次元: 86
  • train, validation, testの分割: scaffold split (Chainer Chemistry の ScaffoldSplitter 使用)、0.8 : 0.1 : 0.1
GWM の論文中に記載のなかったバッチサイズについては Optuna[7] を使用し、train データと validation データを用いて探索を行いました。その結果、バッチサイズは Chainer Chemistry 版では136、改良版でも136と決まりました。
学習では train データと validation データを合わせたものを train データとして扱い、QM9 データセットの SMILES、A、B、C を除く12種類の使用ラベルの物性値を 50epoch 学習させました。
モデルの評価はテストデータについての Mean Absolute Error (MAE) を用いました。

・結果
GWM 論文における NFP の MAE は 6.16 でした。弊社で訓練した Chainer Chamistry 版の MAE は 6.11 でした。一方で改良版の MAE は 5.09 でした。
この結果より、GWM 論文と Chainer Chamistry 版の結果が一致することを確認した上で、化学のドメイン知識を用いたアルゴリズムの改良によって MAE が改善することを示すことができました。

まとめ

本記事では化学のドメイン知識を用いて、物性予測における GNN の性能向上ができないかを考えました。化合物をグラフで表現する際に元の情報が失われている点に着目し、結合次数の違い(多重辺)を考慮した改良を Neural Finger Print (NFP) に加え、結果としてオリジナルの手法よりも精度の高い予測値を得ることができました。

化学的な観点から考えると、多重辺、すなわち結合次数の識別は物性予測において非常に重要な情報です。例としてエタンとエチレンの違いを考えます。エチレンはエタンの炭素原子同士の結合を単結合から二重結合に変えた化合物ですが、分子の構造はエタンとは大きく異なります。エチレンでは二重結合の存在によって構造の立体性が失われ平面構造になります。平面構造の上下に電子雲の存在する二重結合は単結合に比べて反応性(本実験の homo, lumo, gap に関係があります。) が高くなるため、エチレンとエタンは反応性が異なってきます。他にも、窒素原子同士の間に三重結合の存在する窒素は他の化合物と反応しにくい不活性ガスとして知られており、食品を新鮮に保つためのパッキング等に用いられていますが、一方で窒素原子同士を単結合でつなぎ、各窒素に2つの水素原子が結合したヒドラジンは反応性が高く、ロケットエンジンの推進剤に用いられます。結合次数が変わり水素原子との結合が増減する (結合次数を考慮しないと同じグラフになります。) だけで化合物の反応性が変わることは多々あることです。また、二重結合が単結合と交互に存在する共役長が伸びると化合物の吸収波長 (本実験の物性値には存在しません。) がシフトし可視光吸収を示す場合があり、これは化合物の色と関係します。このように結合次数が変わるだけで変化する物性値は数多くあり、結合次数の識別ができるようになったということはこれらの物性値の違いも識別できるようになったと言えます。

今後の展望

現在、GNN のアーキテクチャや訓練テクニックについては活発な研究がなされていますが、一方で GNN に入力する際の化合物の適切なグラフ表現に関しては目立って研究がなされているようには見えませんでした。

今回紹介した結合次数以外にも、結合としては明示的に書かれない水素結合などの分子間力や立体的な配置など、物性や反応性に大きく影響する要素は数多く存在します。グラフは化合物の構造をシンプルに表しますが、それによって失われてしまう情報もたくさんあるのです。

今後はモデル構造や訓練方法だけでなく、化合物の情報を失わないようにグラフ化する、もしくは失われた情報を再度組み込むなど、よりいっそう化合物の扱いに特化した GNN 手法が出てくるかもしれません。


ALBERTでは、様々な専門的バックグラウンドを持つデータサイエンティストを募集しています。詳しくは採用ページ(https://www.albert2005.co.jp/saiyo/?place=blog_text)をご覧ください。

参考文献
[1] David Duvenaud, Dougal Maclaurin, Jorge Aguilera-Iparraguirre, Rafael Gómez-Bombarelli, Timothy Hirzel, Alán Aspuru-Guzik, and Ryan P. Adams. Convolutional Networks on Graphs for Learning Molecular Fingerprints. https://papers.nips.cc/paper/5954-convolutional-networks-on-graphs-for-learning-molecular-fingerprints.pdf (2019/10/30 参照).
[2] Glen, Robert & Bender, Andreas & Hasselgren, Catrin & Carlsson, L & Boyer, S & Smith, James. (2006). Circular fingerprints: Flexible molecular descriptors with applications from physical chemistry to ADME (vol 9, pg 199, 2006). IDrugs: the investigational drugs journal. 9. 311-311.
[3] Katsuhiko Ishiguro, Shin-ichi Maeda, and Masanori Koyama. Graph Warp Module: an Auxiliary Module for Boosting the Power of Graph Neural Network in Molecular Graph Analysis. https://arxiv.org/pdf/1902.01020.pdf (2019/10/30 参照).
[4] L. Ruddigkeit, R. van Deursen, L. C. Blum, J.-L. Reymond, Enumeration of 166 billion organic small molecules in the chemical universe database GDB-17, J. Chem. Inf. Model. 52, 2864–2875, 2012.
[5] R. Ramakrishnan, P. O. Dral, M. Rupp, O. A. von Lilienfeld, Quantum chemistry structures and properties of 134 kilo molecules, Scientific Data 1, 140022, 2014.
[6] Kingma, Diederik & Ba, Jimmy. (2014). Adam: A Method for Stochastic Optimization. International Conference on Learning Representations.
[7] Preferred Networks. Optuna: A hyperparameter optimization framework. github.com/pfnet/optuna, 2018.
[8] Keyulu Xu, Weihua Hu, Jure Leskovec, and Stefanie Jegelka. How Powerful are Graph Neural Networks? https://arxiv.org/pdf/1810.00826.pdf (2019/11/27参照).

物体検出手法 CornerNet の紹介と実験

$
0
0
こんにちは。先進技術部でアルバイトをしている河田です。
今回は、Law & Dangにより2018年8月に提案された物体検出手法CornerNet[1]について紹介します。

はじめに

CornerNetは
  • 主流の物体検出モデルのほとんどで用いられている Anchor Box を排除
  • Corner Poolingという新しいPooling手法を導入し、Bounding Boxの左上・右下のコーナーを検出
という点で、多くの物体検出手法の中で異彩を放っていました(発表当時)。

本記事では、まずCornerNetの仕組みについて説明したのち、弊社で再現実装を行い独自データセットで訓練した結果を紹介します。

物体検出の基礎知識

物体検出とは

CornerNetの具体的な解説にうつる前に、まず物体検出の基礎的な事柄について説明します。
物体検出とは、画像認識タスクの一つで、「画像のどの位置に」「何が写っているのか(クラス)」を検出するものです。一つの画像に複数の物体が写っていた場合、それぞれについて位置とクラスを検出しなければなりません。
物体検出タスクでは、物体を囲う矩形の位置と大きさを推定するのが一般的で、この矩形を Bounding Box (BBox)と呼びます。
Faster R-CNN以降の多くの物体検出手法では、BBoxの中心座標\left( x, \ y\right)と大きさ\left( w, \ h\right)を、ニューラルネットワークを用いて推定します。この回帰問題を直接解くのはいくつかの点で困難なため、Faster R-CNN では\left( x, \ y, \ w, \ h\right)を直接出力させるのではなく、Anchor Boxと呼ばれる矩形のテンプレートを変形させることで予測BBoxを作り出すという方法が取られました。Anchor Boxを用いたBBoxの推定はFaster R-CNN以降の物体検出手法にも受け継がれ、物体検出における事実上のスタンダードとなっています。

Anchor Box について

Anchor Boxとは、図1に示すように、異なる大きさ・縦横比を持った矩形のテンプレートです。多くの物体検出手法では、直接BBoxを推定する代わりに、これらのAnchor Boxから最も形の合うものを一つ選び、それを変形して予測BBoxとします。
物体と形状の近いAnchor Boxが存在する場合、そのAnchor Boxに小さな変形を施すだけで予測BBoxを作成できるため、問題が簡単になり、訓練の安定性や検出精度の向上が期待できます。
その一方で、適当なAnchor Boxが存在しない場合は対象の物体を検出しそこねる可能性があるため、Anchor Boxの設計は注意深く行われる必要があります。
図1 Anchor Box

One-stage detectorとTwo-stage detectorについて

ニューラルネットワークを用いた物体検出手法は、検出を1段階で行うか2段階で行うかによって、それぞれOne-stage detectorとTwo-stage detectorに分類されます。
Two-stage detectorでは、まず1段階目でBBoxの候補を抽出します。そして2段階目でクラス予測とBBoxの修正を行い、最終的な予測結果を生成します。Two-stage detectorの代表はFaster R-CNNです。
一方のOne-stage detectorはBBox生成とクラス予測を一度に行います。そのため一般にOne-stage detectorは構成がシンプルになり、学習や推論の高速化が見込めます。そのぶん検出精度はTwo-stage detectorに劣る傾向があります。YOLOやSSD、今回紹介するCornerNetはOne-stage detectorに分類されます。

CornerNet について

CornerNetでは、BBoxの中心座標と大きさではなく、左上と右下の頂点(corner)の座標\left( x, \ y\right)をそれぞれ推定します。その後、同一物体の左上と右下の頂点を対応付けることで、物体を検出します(図2)。クラス予測は、頂点の検出と同時に行います。
頂点の検出では、画像上の各ピクセルの頂点らしさを確率マップとして出力する方法をとっており、そのためAnchor Boxが不要となっています。

検出の流れをもう少し具体的に見ていきましょう。まず画像をHourglass Networkに入力して、特徴抽出を行います。得られた特徴量を、左上・右下頂点それぞれを検出するネットワークに流し込み、それらの出力をCorner Poolingレイヤーを通した後、それぞれでHeatmap、Embedding、Offsetの3つ出力させます。最後にこれらの出力を合わせて検出結果とします。
図2, 3 CornerNet概要図
以降では、それぞれのモジュールについて順に説明していきます。

Hourglass Network

先程述べたように、Hourglass NetworkはCornerNetで用いられている特徴抽出用ネットワークです。砂時計をいくつも繋げたような形になっていることからHourglass(砂時計)という名前がつけられているようです。Hourglass Networkはもともと姿勢推定[2]で提案されたアーキテクチャで、特徴マップのサイズを小さくしたり大きくしたりを繰り返すことで異なるスケールの情報を統合しようという意図で設計されています。
Hourglass NetworkはResNetと同様、Residual(残差)構造を採用しており、特徴マップの拡大縮小をまたいで空間情報が落ちてしまうのを防いでいます。
図4 Hourglass Networkの内部構造の一部。この構造を繰り返す。

Corner Pooling

Hourglass Networkで抽出された特徴量は、Corner Poolingに通されます。このCorner PoolingがCornerNetの鍵となります。というのも、物体を囲うBBoxの頂点を検出するという問題設定は、そのままでは大きな欠点を抱えているからです。
図5を御覧ください。これらの画像ではBBoxの頂点部分に物体の一部ではなく背景が写っており、そのままでは頂点の検出は困難です。なぜなら、CNNは位置関係を保存して特徴抽出を行うため、画像上で物体の存在しない領域については、特徴マップ上にも情報が存在しないと考えられるからです。
図5 頂点の画素に物体が写っていない例
そこで、物体の情報を左上と右下の頂点になんらかの方法で集める必要があります。それを担うのがCorner Poolingです。
例として、左上に情報を集めるCorner Poolingを図6に示します。
図6 左上に特徴量を集めるCorner Pooling
左上に情報を集めるためには、下から上に、また右から左にと特徴マップを走査していけばよいわけです。ReLUのような活性化関数を用いたネットワークでは、特徴の存在する位置の値は大きくなるため、走査しながら、それまでの最大値で特徴マップの値を上書きしていきます。最後に下から上、右から左に走査した結果を足し合わせて、それを出力とします。

具体的な数値で計算をしてみましょう。
図7 具体的なCorner Poolingの計算
図7の赤枠部分に注目してください。この2つの赤枠は、右から左への走査の、走査前と走査後の様子を示しています。
走査前では、一番右の数は2,その次の数は0です。これを右から順番に見ていき、それまでに見た最大値で上書きします。したがって、二番目の0は2で上書きされます。
次の数は3です。これまでの最大値は2ですから、上書きはしません。
次の数は1です。これまでの最大値は3なので、1を3で上書きします。
……と繰り返し、最後に右から左の走査結果と下から上の走査結果を足し算するわけです。

このCorner Poolingによってほんとうに頂点を検出できるかどうか、簡単な例で確かめてみたいと思います。
図8を御覧ください。一番左の図がCorner Poolingに通される特徴マップです。青い部分に物体が存在しているとします。各値はHourglass Networkで抽出された特徴量で、値が大きいほどなんらかの特徴が存在することを意味しているとしましょう。これにCorner Poolingを適用したものが、一番右の図です。最も値が大きいのが黄色で示している部分で、これが頂点として検出されます。実際、これを左上頂点とする矩形で囲ってみると、物体のある領域をうまく捉えられていることがわかります。
図8 頂点に特徴量が集まっていることが分かる

Heatmap

ではここからはCornerNetの3つの出力について順に述べていきます。
HeatmapはBBoxの頂点の存在確率を示します。Heatmapにはクラス数と同数のチャネルが存在し、各チャネルが対応するクラスの頂点に反応するよう訓練されます。HeatmapはSigmoid関数によって0~1の値をとるよう調節されており、物体頂点がありそうな位置のHeatmapの値は1に近づいていきます。
さて、Heatmapはどのように訓練されるのでしょうか。
物体検出用データセットでは、人手でアノテートされた正解BBoxとクラスラベルが与えられるのが一般的です(例えば、([10, 130, 40, 250], “person”)など)。CornerNetではこの正解データを用いて、正解Heatmapを作成し、これと推論されたHeatmapを比較してLoss(損失)を計算します。
正解Heatmapは、正解BBoxの頂点の値を1として、これを中心にガウス分布に従う広がり(式1参照)をもたせたものを利用します(図9)。
もし仮に頂点の座標のみに1を立てたようなHeatmapを正解データとして使うと、予測が1ピクセルでもずれると完全に間違いということになってしまうため、多少の誤差を許容するために正解に広がりをもたせているわけです。
その際、BBoxのサイズによってズレが予測に与える影響は変わるため、σを調節してペナルティの大きさを制御します。小さいBBoxではσを小さくして分布の広がりを狭め、逆に大きなBBoxではσを大きめにするのです。
図9 正解Heatmapの例
では今度はLossの計算式を見てみましょう。Lossは式2に示すように、「ぴったり正解BBoxの頂点に一致した点」とそれ以外の点とで計算式が異なります。
(N= 正解BBoxの数、c= チャンネル数、
H= 画像の高さ、W= 画像の横幅、
p= 推定heatmap、y= 正解heatmap、
α,β= ハイパーパラメータ(論文および再現実装ではα=2, β=4))

ぴったり正解BBoxの頂点に一致する点(y_{cij}=1)については、式2の上の式でLossを計算します。この式では、予測Heatmapの値が1に近いほどLossは小さくなります。
一方、それ以外の点では式2の下の式で計算します。こちらの式では、予測Heatmapの値が0に近いほどLossが小さくなります。正解BBoxの頂点に近くても、一致しない限りはHeatmapの値を0に近づけるということです。ここで式の前についている(1-y_{cij}) に注目してください。 y は正解Heatmapの値ですから、正解BBoxの頂点に近ければ (=y_{cij}が大きければ)Lossが小さくなる、つまりペナルティが軽減されるということになります。この動的にスケーリングされる損失関数をFocal Lossと呼びます。

Embedding

Heatmapによって各物体の左上と右下の頂点候補を得ることができますが、このままでは、どの左上頂点とどの右下頂点がペアなのかわかりません。
図10 HeatmapだけではBBoxを一意に決められない
そこで頂点ペアの決定に用いられるのがEmbedding(埋め込みベクトル)です。
Embeddingはクラス数に関係なく共通のベクトルで、各ピクセルに対して一つずつ得られます。論文ではEmbeddingは1次元になっています。
このEmbeddingが近いものがペアであるということにすれば、BBoxを一意に決定することができそうです。
図11 図中の数字がEmbedding.例えば0.34と0.36が近いのでグループ化可能
さてこのようにEmbeddingを用いて頂点のグルーピングをするためには、同一BBox上でペアになる頂点間のEmbeddingの距離が近く、逆にペアではない頂点間ではEmbeddingの距離が遠くなればよいわけです。
図12 このように学習したい
これを実現するために、式3にもとづいてLossを計算します。L_{pull} がペアとなる頂点間で定義されるLossで、L_{push}がペアではない頂点間で定義されるLossです。順に説明していきましょう。
e_{t_k}= k番目の左上の頂点のEmbedding、
e_{b_k}= k番目の右下の頂点のEmbedding、
e_k= k番目の左上と右下の頂点のEmbeddingの平均、
δ=1 (ハイパーパラメータ)

Embedding Lossの計算では、ペアとなる頂点間のEmbeddingの平均を、基準として用います。
まず、 L_{pull} では、 ペアとなる頂点のそれぞれのEmbedding ( e_{t_k}e_{b_k} )がそれらの平均( e_k )に近づくようにします。
次に L_{push} ですが、これは少々わかりにくいかもしれません。 L_{push} では、頂点ペアのEmbeddingの平均値 ( e_k )を、それ以外のすべての頂点ペアのEmbedding平均 ( e_j ) と比較します。その差が δ 以上であれば0、 δ 未満であれば δ との差分が L_{push} に加算されるのです。例えば図13では e_k=0.35 , e_j=1.10 で、2つの差は |e_k-e_j|=|0.35-1.10|=0.75 です。これは δ (今回は1)より小さいので、  1-0.75=0.25 がLossに加算されます。この L_{push} を最小化することで、異なる頂点ペアのEmbeddingを十分( δ 以上)に引き離すことができるわけです。
図13 e_ke_j

Offset

3つ目のOffsetは、BBox位置の小さなズレの修正に用いられる値ですCornerNetにおいて、HeatmapやEmbeddingなどの出力は、入力画像よりも低解像度になっています。これは計算量の都合です。
BBox検出の際は、Heatmap上で閾値以上に値の大きな点を頂点として選びますが、このときHeatmapの解像度が入力画像よりも小さいため、得られた座標を定数倍して入力画像サイズに戻す必要があります。ここでズレが生じます。例えば正解BBoxの一つの頂点のx座標が102だったとしましょう。Heatmapが入力画像の1/4に縮小されていたとすると、Heatmap上の座標値は元の画像上では4の倍数にしかなりませんから、102という正確な値は出すことができません。ここで登場するのがOffsetです。
CornerNetでは、(予測頂点のHeatmap上の座標+Offset)を定数倍して最終的な推定結果とします。OffsetはHeatmapの各値に対してx軸方向とy軸方向の2チャネルを出力します。Embedding同様こちらもクラス数には依存しません。
図14 Offsetによって座標を微修正する
正解Offsetとしては、図15に示すように、正解BBoxの各座標を出力サイズに縮小したときの小数点以下の値を使用します。図15では0.5と0.75がそれぞれx軸、y軸のOffsetとなります。OffsetのLossの計算には、Smooth L1 loss を用います。
図15 正解Offsetの計算
図16 Smooth L1 Lossのグラフ

精度

論文で報告されているCornerNetの精度です。
図17 各手法との精度比較
論文では、MSCOCOデータセットを用いて実験を行っています。筆者は、CornerNetは他のOne-stage detectorより高精度であり、Two-stage detectorに匹敵していると主張しています。
以下に論文に掲載されている物体検出結果の一部を示します。小さいボールやスプーン、また密集したキリンや人など精度よく検出できていることがわかります。
図18 CornerNetによる検出結果

CornerNet 再現実装

ここまでCornerNetの手法の解説を行ってきましたが、最後に、弊社で再現実装を行い、独自のデータセットで評価した結果を紹介します。データセットは弊社で収集した、車載カメラによる走行画像です。
データセットは1シーケンス60枚程度の連続した画像からなり、全体で598シーケンスあります。このうち512シーケンスを学習用、残りの86シーケンスを評価用に利用しました。データセットは「信号」「車」「歩行者」など全17クラスのアノテーションがされていますが、データ数の少ない(500未満)6クラスを除外し、11クラスで訓練を行いました。
画像サイズは1920×1200で、これを512×512にリサイズして使用しています。
図19 アノテーション例
次に学習条件の詳細について述べます。
訓練時にはAugmentationを行いました。利用したAugmentation手法は、色・明るさの変更、左右反転、ランダムクロップです。
OptimizerとしてはAdam(α=1e-4, beta1=0.9, beta2=0.999)を用いました。
論文では、HeatmapとOffsetのLossは1倍、Embeddingは0.4倍して足し合わせていると書かれていますが、さまざまに条件を変えて実験した結果、以下のようにLossを変更しています。
まずHeatmapについて、独自データセットは頂点の密度がMSCOCOより小さいことを考慮し、頂点のない部分のLoss(式2、下式)を1/50倍しています。
またEmbedding loss が軽視される傾向があったため、係数を0.4倍ではなく1倍に変更しました。

最後に評価時の条件についてです。まずHeatmapから値が0.4以上の点の座標をとってくることで頂点の候補を列挙します。次に、それぞれの頂点候補に対して、最もEmbedding間距離の小さいものをペアとし、BBoxを生成します。ここで重複するBBoxが多数生成されるため、NMS(Non Maximum Suppression)を施して取り除きます。これは、2つのBBoxのIoUを計算し、これが閾値以上だった場合に、予測確率(そこに物体があるという確信度。今回は2頂点のHeatmapの平均値を用いた)の大きいもののみを残すという手法です。NMSの閾値は0.4に設定しました。

評価にあたっては、予測BBoxと正解BBoxを比較して、クラスが一致していてかつIoUが0.5以上であった場合に正解とし、mAPを評価指標としました。

学習は23 epoch行い、およそ3日間かかりました。

結果

結果は、11クラスに対しmAP=0.202というものでした。
論文の値よりもかなり低くなってしまいましたが、11クラス中には訓練データが少ないものもあり、それらがmAPを大きく減少させていました。
高精度で検出できているクラスの例としては、車がAP=0.482、停止標識がAP=0.557などと健闘していました。

以下は検出結果の例です。まずうまくいったものから紹介します。
図20 検出例(うまくいったもの)
画像中の青い印は左上の頂点として検出された領域、赤いものは右下の頂点として検出された領域を示しています。
車や信号、歩行者がおおよそ検出できていることがわかります。上の画像では歩行者はかなり小さく映っており、外観も様々ですが、きちんと検出できています。

一方で検出に失敗した例を図21に示します。BBoxが大きく広がってしまっている様子がうかがえます。これは、片方の頂点がうまく検出できなかったり、誤った頂点をペアにしてしまったりした結果です。Embeddingの学習がうまくいっていないことを示しています。
図21 検出例(うまくいかなかったもの)
Embeddingについては、論文通り1次元の値を使ったのが問題ではないかと考え、128次元に拡張して実験を行ってみましたが、かえって精度が下がってしまいました。

まとめ

本記事では、CornerNetの手法の解説と、弊社で再現実験を行った結果の紹介を行いました。
再現実験では十分な結果は得られませんでしたが、これがデータセットの特性によるものなのか、実装に不備があるのかは検証できていません。
再現実装に関してはChainerを用いたのですが、cupy.ElementwiseKernelを使ってGPUでの処理を書くのが非常に難しかったです。
十分な精度は出せませんでしたが、なぜこの方法で物体検出ができるのかという論理の読み取り、読みやすいプログラムの書き方などが学べ、大変勉強になりました。

ALBERTでは、データサイエンティストを募集しています。ぜひ採用​ページをご覧ください。

TensorRTを用いたエッジデバイス上でのDNN (Deep Neural Network) 推論高速化

$
0
0

こんにちは。2019年に新卒としてALBERTに入社した、データソリューション本部の水船です。入社してから、画像認識プロトタイピングのツールの開発や、画像認識の研究開発案件に取り組んでいます。また、弊社では先進技術部という部署が新設され、私自身は所属は違うものの、先進技術ワーキンググループの一員として業務の20%をリサーチ業務に充てています。今回は先進技術ワーキンググループの活動として取り組んできた、「TensorRTを用いたエッジデバイス上でのDNN (Deep Neural Network) 推論高速化」について話していきます。

なぜエッジデバイス上での高速化を行うのか?

DNNモデルをシステムに実装する時に、大きく分けて、Microsoft Azureなどの「クラウドサービス」かJetsonシリーズなどの「エッジデバイス」のどちらかにDNNモデルをデプロイすることになります。クラウドサービスには計算機の維持管理コストが低く、必要な時に必要なだけの計算リソースが確保出来るなどのメリットもありますが、ネットワークを経由することによる処理の遅延やセキュリティ面の観点からエッジデバイスを選択されるお客様が増えてきています。

さらに、システムによってはリアルタイムで推論をする必要があり、厳しい処理速度の要件を満たすためにエッジデバイスを用いる以上のさらなる高速化を求められることも多いです。しかしながら、自動運転のような技術はリアルタイム処理が求められますが、精度を犠牲にすると事故につながりますので、精度を下げるような高速化はできません。高速化のためには性能の良いデバイスを使えば良いのですが、電力消費量や費用面を考えると難しい場面が非常に多いです。

そこでこの記事では、なるべく経済的に精度を落とさずに高速化するために、Jetsonシリーズで現在一番省電力・低コストであるJetson Nanoを用いて、Chainerで推論したニューラルネットのモデルに対しTensorRTを使ったらどれくらい早くなるのかを説明します。また、どのようなニューラルネットのモデルを構築すればより速度を改善できるのかも検証していきます。

高速化するにはどうすれば良いのか?

TensorRTについて触れる前に、高速化手法にはどのようなものがあるかを概観します。結論から述べると、以下の方法が考えられます。

  • ONNX Runtime, TVM, TensorRTなどのDNNコンパイラを使用する
  • SqueezeNetやMobileNetなどの軽量なDNNモデルを用いる
  • fp32からfp16に変更する
  • Knowledge Distillation
  • Pruning
  • 量子化

まず、DNNコンパイラについて説明します。DNNコンパイラにはいろいろあり、有名なものだとnGraphやTVM、TensorRTがあります。これらのコンパイラが何を行なっているかを一部挙げると、

  • NNのLayer Fusion: 複数のネットワークの処理を一つの処理として結合。ConvolutionとReLUの演算を融合させたりできる
  • メモリやオペレータレベルでの最適化: 処理を行う時に無駄な空き時間ができるが、それらの空き時間をできるだけ消すことができる

といったことを行なっています。この資料が非常にまとまっているので、もう少し詳しく知りたい方はこちらが参考になります。後でプロファイラを用いて、コンパイラによってどのような最適化が行われるかを確認していきます。

SqueezeNetなどの軽量なモデルの利用は、モデル部分の実装を変えるだけでよく、非常に導入が容易です。案件でもとりあえず動かしたい、というときはSqueezeNetをベースにして実験したりすることが多いです。ただし、精度はある程度落ちてしまうので注意が必要です。

そのほかの手法に関しては様々な場所でよく紹介されているので説明を省きますが、これらも速度向上が見込める代わりに精度を犠牲にする可能性が高く、実装も一手間必要なのでこの記事では使用を見送ります。

本記事では高速化コンパイラとして、Jetson nanoと同じくNVIDIAに開発され、Jetson Nano Developer Kit SD Card Imageにもデフォルトで入っているTensorRTを使います。

実験

上記の環境構築の元、1枚の224×224のRGB画像に対して以下の実験を行いました。

  • VGG16をChainerの推論とTensorRTの推論で速度比較
  • ResNet101をChainerの推論とTensorRTの推論で速度比較
  • SqueezeNet v1.1をChainerの推論とTensorRTの推論で速度比較

実行環境は以下の通りです。

  • NVIDIA Jetson Nano
  • Python3.6.8
  • Jetpack 4.2.0
  • TensorRT 5.1.6.1
  • CUDA 10.0
  • cuDNN 7.5.0

また実行前に以下のコマンドを実行してパフォーマンスを最大化しています。

$ sudo nvpmodel -m 0
$ sudo jetson_clocks

速度比較に関しては100回推論のモデルを計算させ、その平均時間を最終的な推論時間としています。ただし、100回推論させる前に1回推論を実行し、計測時間に含めないようにしています(最初の1回はカーネル起動や計算グラフ構築のために時間がかかるため)。実際のシステムでは継続的にDNNモデルが動くことが想定されるので、1回目の推論時間は捨てた方がより現実に沿った計測になります。

実験結果は以下の通りです。

モデルChainerTensorRTSpeedup
VGG16152ms140ms8% UP
ResNet101146ms89ms64% UP
SqueezeNet v1.124ms8ms200% UP

SqueezeNet、さすがの速さですね。TensorRTを使うと100FPSくらい出そうです。結果を見ると、ResNet101がVGG16と比べかなり高速化されていることがわかります。ResNet101はVGG16と比較すると良い精度を出せることが多いと感じているので、さらに高速化の余地も見込めるとなると非常に嬉しいですね。ちなみにこちらの結果では、ResNet101の方が精度が良いと出ています。またSqueezeNetに至っては3倍も速度が向上しています。

以上の結果から、TensorRTによってどのモデルも速度向上されることが分かりました。しかし、これらのネットワークアーキテクチャによる差は気になるので、その原因を調べていきます。

NVIDIA Visual Profilerで速度改善の要因を探る

NVIDIA Visual Profilerで、それぞれのモデルのどの部分で時間がかかっているかを計測しました。結論としては、以下の速度改善が確認されました。

  • ConvolutionとReLU, BNのLayer Fusion
  • 処理の空き時間の減少
  • Residual ModuleのIdentity MappingのLayer Fusion
  • SqueezeNetのconcat処理の削除

一方、FC層は速度改善が見られませんでした。

ResNetはVGGと比較するとFC層が少なく、ReLUだけでなくBN層やIdentity Mappingの処理が統一されることによって、VGGと比較すると速度向上が大きかったと考えられます。また、SqueezeNetは他の手法と比べるとかなり空き時間が発生しており、その解消が大幅な速度改善につながったと考えられます。

以下の節ではこのうち、ConvolutionとReLUのLayer Fusionと処理の空き時間の解消について、Visual Profilerで可視化していきます。

ConvolutionとReLUのLayer Fusion

まず、SqueezeNetのConv1層目の挙動を確認します。上の結果がTensorRT、下の結果がChainerの推論時間のプロファイルです。ただし見やすくするために時間幅が上下で異なることに注意してください。SqueezeNetではConv1層目の次の処理がPoolingなので、それまでの処理時間を比較すれば良いことになります。

TensorRTのConv1層の推論時間は0.5msであったのに対し、Chainerの推論では2ms強の推論時間となっているため、ここの処理が4倍になっています。また、Chainerでは3つのプロセスが動いているのに対し、TensorRTでは1つの処理となっていることが確認されました。これはLayer Fusionの最適化が働いていそうですね!

他のプロセスも確認してみましたが、Convolution+ReLUの処理は2~4倍くらい速くなっていました。

  • TensorRTのプロファイラ結果
  • Chainerのプロファイラ結果

処理の空き時間の減少

次に処理の空き時間について確認します。上の図がTensorRTの処理で、下の図がChainerの処理です。プロファイラ結果を見ると、Chainerの推論では0.2~0.5msの空き時間が散見されるのに対し、TensorRTの推論ではほとんど空き時間がありません。このことから、TensorRTがオペレータやメモリの最適化を行なっていることを確認できました。

たかがコンマms、されどコンマmsです。それが積もり積もることで、SqueezeNetは3倍も速度向上したと考えられます。

  • TensorRTのプロファイル結果
  • Chainerのプロファイル結果

まとめ

この記事ではJetson Nano上でTensorRTを動かして、どれくらい速度改善されるか、またどのようなモデルがどれくらい速度改善されるかを実験し、モデルの構造によって大きく改善幅が異なることを紹介しました。近頃はプログラミングが不要の深層学習ツールなども登場し、深層学習を試す敷居は格段に下がりました。しかしながら、処理速度などの要件を満たすようにモデルを適切に改良したりすることは、まだまだツールだけでは不可能であり、今後はしっかりとモデルの中身を理解し、実社会に深層学習を実装できる技術者の需要が高まっていくと思われます。

今回は画像分類のモデルに対して高速化の実験を行いましたが、物体検知や深度推定などのより応用的なタスクに対しても高速化を試そうと考えています。タスク特有のネットワーク構造によって最適化しやすい/しにくいなどや、そもそもコンパイルできるかどうかもやってみないとわからないところがあります。次の機会にこれらの結果を紹介したいです。

今回実験をしてみて、実験条件、精度や推論速度などの実験管理の部分でもっと工夫の余地があったと感じています。ConvolutionとReLUがLayer Fusionされることを確認しましたが、今回使用した3つのモデルに入っていない、他のActivation LayerやNormalization Layerも同様にLayer Fusionされるかはやってみないとわからないので、それらを確かめるために、より多くのモデルに対して実験を行う必要があるためです。分析プロジェクトでも実験管理を工夫することによって、作業効率や再現性の向上が期待されるため、プロジェクト業務の方でも色々試していきたいです。

新技術は実験してみないとなかなか実務に活かせなかったりする一方で、機械学習分野は発展が著しいので、常日頃から新しい技術を積極的に学んでいくことが重要です。先進技術のワーキンググループでは、深層学習に関する知識・経験が弊社でもトップクラスの先輩方と、活発に議論をしながら非常に楽しくリサーチ業務をやっています。リサーチ業務はすぐプロジェクトに役立つというものではありませんが、会社の技術力向上に貢献し、お客様により大きな価値を提供するために、今後も積極的に取り組んでいきたいです。

ALBERTではこのような先進的な技術調査のマネジメントを行うメンバーやその他の様々な職種のメンバーを積極的に募集しています!ご興味のある方はこちらをご覧ください!

【2019年新卒入社】ブラザー・シスターとの絆が深まる!「ブラシス制度」のご紹介

$
0
0
本ブログを見ていただきありがとうございます。新卒1年目データアナリストの梁木(はりき)です。会社に入ってやっと1つ目のプロジェクトが終わり、社会人の大変さを最近実感しています。
今回は今年度から導入された「ブラシス制度(ブラザーシスター制度)」についてお話したいと思います。
個人でもブログを書いたことがないので、今回が人生初めてのブログです。書き方が合っているのかよくわからないのですが、最後まで読んでいただけるとうれしいです。

ブラシス制度とは、1年目新卒社員を先輩社員が支援してくれる制度です!新卒社員は先輩社員とペアを組み、月に1回以上様々なことを先輩社員に相談する機会を設けることができます。その際に例えばこのような感じのことを相談できます。

  • 今の案件で困っていること
  • どのようなキャリアパスを歩みたいか
  • 職場の人間関係
  • (食通の先輩社員なら近くの名店の紹介)
  • etc
もちろん強制的に新卒社員が話さないといけないわけではなく、言いたくなければ言わなくてもいいですし、他の人に聞かれたくない話なら会議室内で相談することも可能です。ちなみに私は先輩社員にガンガン相談するタイプで、新卒社員の中で一番この制度を活用しているような気がします笑(だからこのブログを書くことになったのか)

ブラシスの風景① 左:新卒2年目社員、右:新卒1年目社員(私)

ブラシスの風景② 左:新卒1年目社員、右:新卒2年目社員

さて、ブラシス制度の概要はこのくらいにして、半年間この制度を活用してきた私の感想を書いていきたいなと思います。

個人的に一番よかったと思うことは、案件の相談ができることです。データアナリストの仕事は案件の性質上、少人数のチームを組むことが多いです。新卒社員は仕事の進め方を1から学ぶ必要があり、また少人数なので分析方針を自分から チーム内に提案する機会があったりします。1年目からやれることが多くやりがいを感じる一方で、色々不安を感じることもままありました。

このようなことって、去年同じ立場で経験してきた先輩社員が一番相談しやすいですよね。実際私のブラザーには、案件に関して、精神的なことから技術的なことからめちゃめちゃ相談に乗ってもらいました。半分くらいは話している内に自己解決することでしたが、もう半分は先輩社員と一緒に考えを整理することで、初めて不安を取り除けることでした。本当にありがたい制度だと感じます。

また、このような1対1の相談だけでなく先輩とご飯を食べながら話す機会もあります。気軽な話ならこういう場の方がしやすいですね。

ブラシス飲み会風景①

ブラシス飲み会風景②
私も来年度からは支援する立場になるので、今のうちに先輩社員からいろいろ学んでおきたいと思います。来年度以降も、新卒入社する方々が少しでも安心して働ける環境になりますように。 ALBERTではデータサイエンティストを積極募集しています。新卒・中途問わず興味を持っていただけた方は、ぜひ採用ページをご覧ください。

三次元空間のニューラルな表現とNeRF

$
0
0
はじめまして、先進技術部の山内です。入社4年目にしてついに技術ブログを書くことになりました。わたしが文章を書くとどうもペダンティックな文体になりがちなのですが、頑張って書いたので気に食わない表現には適宜目を塞ぎつつお付き合いいただければと思います。今回はニューラルネットワークによる三次元空間表現手法の紹介と NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis[1] という論文の解説です。PyTorch による再現実装も公開しているのでご覧ください。

はじめに

現実世界の意味と構造を理解することは、人工知能研究の大きな目標の一つです。理解するとはどういうことかといえば、この場合は、何らかの行動計画に用立てることのできる良い「表現」を獲得すること、と考えることができるでしょう。というと、表現とは何かという問いが提起されるかもしれませんが、ここでは、それを解釈する何らかの処理系の存在するもの、くらいに定義しておくことにします。現実を描写した文章は人間にとって表現であり、バイト列は計算機にとって表現です。 たとえば、ある画像にたいして「リンゴ」とラベルを付けておきます。ここで文字列「リンゴ」は画像のひとつの表現であって、これを使えばコンピュータ上に保存された膨大な画像の中からリンゴの写っているものを検索してくることができます。これは、画像をただの色(ピクセル値)の集合(もちろんこれもひとつの表現ではあります)とみなしていたのでは不可能な仕事です、というのも一般にコンピュータは画像の内容を理解できないからです。画像の意味内容を文字列というコンピュータにとって馴染深い表現に人の手で変換しておくことによってはじめて、コンピュータは目当ての画像を探してくることができます。画像をラベルという表現に変換できるのは人間の現実理解力だけであり、それがあってはじめて、コンピュータは処理を開始することができる、それゆえいくらコンピュータの性能が向上しようと、入力作業は人間が行う必要がありました。 ところが近年、深層ニューラルネットワークの大躍進によって状況は変わってきました。コンピュータ自身が、画像をラベルに変換できるようになったのです。これでもう人間がぽちぽちとラベルを付けてやる必要はありません。それどころか、画像中の物体を検出して位置座標に変換したり、話し言葉音声を書き起こし文に変換したり、平面画像を深度画像に変換したりと、かつて人間の専売特許であった現実理解力を抜きにしてはやれないような仕事を、コンピュータがこなすようになってきています。たいへん素晴らしいことだと思います。 さて、ニューラルネットワークが現実に与える表現は、なにもラベルや座標値のように、人間に直接解釈可能なものに限りません。例えば word2vec[2] という自然言語処理の手法は、その名の通り単語と数百次元程度のベクトルとを相互変換します。「リンゴ」を word2vec に放り込むと \bf{x}  というベクトルを吐き出し、逆にこの \bf{x} を入力すると「リンゴ」を返してくれる。これだけ聞くとなんの面白みもないですが、word2vec のすごさは、変換先のベクトルが、単語の意味関係を保存しているところにあります。例えば「イギリス」「ロンドン」「日本」を word2vec でベクトルに変換したのち、「ロンドン」から「イギリス」を引いて「日本」を足せば、「東京」が得られます。つまり「ロンドン」引く「イギリス」が一般的な意味での「首都性」を表し、これを「日本」に足すと日本の首都である「東京」が出てくるわけです。意味の足し引きができるベクトルに単語を変換できるということは、文章の意味解析をコンピュータに任せられるということであって、実際 word2vec はチャットボットやレコメンドエンジンなどの裏方に広く利用されています。このように意味の演算が可能な仕方でベクトル空間にデータを落とし込むというアイディアは、自然言語に限らずさまざまに応用例を見ることができ、たとえば Variational Auto-Encoder[3] というニューラルネットワークを使えば、画像をベクトルに変換できます。得られたベクトル同士を足し引きすることで、二つの異なる画像の中間にあたる画像を生成したり、画像に特定の特徴を付与したりといったことができて面白いです。また、ベクトル間の距離が近いということは意味的にも近いことが期待されるわけで、類似画像検索などに用いることもできます。 このように、深層ニューラルネットワークは与えられたデータを様々な種類の表現に変換することができます。表現の性質は、どのようにニューラルネットワークを訓練するかによってさまざまに選ぶことができ、特にコンピュータと親和的な表現を得ることができれば、コンピュータの能力を最大限活用できるという点で、大きな可能性を秘めているのです。

三次元空間の表現

先にみたように大きな進展を成し遂げた深層ニューラルネットワーク研究ではありますが、現実世界を理解するという目標に至るには、越えねばならない壁がまだまだあります。現在のニューラルネットワークは基本的に特定タスクに対して訓練されるものであって、人間が生活のなかで相対するあらゆる問題を解けるような汎用的なモデルはいまだ登場していませんし、ハードウェアに対する能力的要求も含めて、実現にはまだしばらく時間を要するでしょう。それゆえ現段階において現実の問題にニューラルネットワークを適用するためには、個別のタスクで訓練されたネットワークと機械的アルゴリズムとをうまく組み合わせる必要があります。それに際して、さまざまなパイプラインに接続可能な「良い表現」を獲得することが肝要になってくるわけです。とくにロボット制御や自動運転など、現実世界に物理的に関わるタスクに対処するうえで重要になってくるのが、三次元空間をどのように表現するかということです。

点群・メッシュ・ボクセル

ロボット制御や自動運転において三次元空間の情報を活用するためには、まず何らかの仕方で空間を計測し、コンピュータに入力しなければなりません。これには一般に各種センサが利用されます。もちろん人間が手入力してもよいですが、空間のモデリングは専門技術が必要でかつ時間もかかるため、一挙に周辺環境をスキャン可能なセンサが存在するならそちらのほうが好都合です。三次元空間をスキャンする方法としては、人間の両眼視と同じく視差を用いて三角測量するもの、構造化光を照射するもの、レーザーを照射し反射光が返ってくるまでの時間を測定するものなどさまざまなものが存在しますが、これらは基本的に、空間上の点の位置座標を返してきます。レーザーの場合を考えるとわかりやすいですが、レーザービームは線状なので物体表面にぶつかると光の点ができ、これを観測すると物体表面上の点の座標が決定できるわけです。こうして得られた物体表面上の点の集まりは、これ自体ひとつの三次元空間表現と考えることができ、これを点群とか point cloud とか呼びます。点群はもっとも取得しやすい三次元空間表現のひとつであり、さまざまなタスクにおいて、足掛かりとして利用されています。 点群という表現は、玩具ロボットを障害物にぶつからないように動かす程度の目的には十分ですが、より高度なタスクを考えると、それだけでは不足する場合が多いです。連続的な空間を点で表現しているため、物体のトポロジー(ある座標が物体の内にあるか外にあるかなど)がわかりづらく、またその点がいったい何者なのかという意味的な情報を欠いています。路面に落ちているレジ袋を猫と誤認するようでは、自動運転は不可能です。したがって、画像など別のセンサの情報を組み合わせて、オブジェクトのトポロジーを補完し、さらにそれが何であるかも認識する必要があります。 点群に似た三次元表現としては、メッシュやボクセル ( voxel ) があります。メッシュは 3DCG でよく用いられるもので、点群のいくつかの点に多角形の面を張ったものです。ボクセルは画像のピクセル表現の三次元版であり、ゲーム「マインクラフト」の世界を想像していただければイメージはつかめるでしょうか。これらの表現にはそれぞれ一長一短ありますが、共通しているのは、空間を離散化して表現しているということで、点やボクセルが全体として何を構成しているのかという情報は陽には表現されておらず、そこから意味を抽出するには、画像の場合と同様に、もうひと手間必要です。というわけで、近年ではボクセルや点群を直接扱うことのできるニューラルネットワークが登場してきています。

ニューラルネットワークによる三次元表現

点群やメッシュ、ボクセルといった三次元表現は昔からあるものですが、その一方で、ニューラルネットワークを利用した新たな三次元表現方法も登場してきています。どうせ後からニューラルネットワークに放り込んで利用するのであれば、最初からニューラルネットワーク的な仕方で空間を表現しておけば便利であり、自然な発想ではあります。この種の三次元表現はいまだ研究段階で、現実問題への応用には課題が残されていますが、深層ニューラルネットワークがますますコモディティ化してゆく中で存在感を増してきているもののひとつです。 例えば Generative Query Network ( GQN )[4] という手法は、2018年6月に DeepMind が発表したものですが、入力された複数視点画像から三次元空間の表現を作成するようニューラルネットワークを訓練します。この表現は、先に触れた Variational Auto-Encoder による画像のベクトル表現の三次元版のようなものです。このベクトル表現を用いると、未知の(入力に含まれていない)視点から空間を見た場合にどのように見えるか、画像として出力することができます。また GQN によるベクトル表現を利用することで、ロボットアーム制御を強化学習で訓練する際に、訓練効率を高めることもできるようです 。 GQN とは少し異なるラインでは、三次元オブジェクトを陰関数 ( implicit function ) として表現するというものがあります。陰関数というのは、例えば単位円の方程式 f(x,y)=x^2+y^2-1=0  など、多変数関数によって表される関係のことです。それぞれの三次元オブジェクトに対して、オブジェクト内部では f({\bf x})<0 , 外部では f({\bf x})>0  となるような関数 f  を見つけてやれば、 f({\bf x})=0 を満たす {\bf x}  の集合がオブジェクト境界面ということになります。こうした三次元表現自体は昔から研究されていたようですが、最近になってこの f  をニューラルネットワークによって近似する手法が立て続けに発表されました[5][6]。どれも基本的なアイディアは同じであり、様々な三次元座標 {\bf x}  に対して、それがオブジェクトの内側にあるか外側にあるかを出力するようニューラルネットワークを訓練するというものです。訓練を終えたニューラルネットワークは、対象オブジェクトの形状情報を内部に備えていることになります。この陰関数による三次元表現は、学習に際して教師 3D データが必要であったり、特定オブジェクトに特化していたりといったデメリットもあるのですが、今後有望ではないかと個人的に興味を持っていました。先に触れた GQN の表現ベクトルは人間には直接理解することができず、その内容を引き出すには別途デコーダを訓練する必要があるのですが、その点、陰関数表現は人間(いにしえの CV アルゴリズム)にもニューラルネットにもそこそこフレンドリーな空間表現となっており、必要とあらば点群などへの変換も容易です。またオブジェクトの内/外に加えて、色や意味情報を埋め込むことも可能なはずで、研究の進展の如何によってはさまざまな応用可能性を秘めているように思われました。 そうした矢先に登場したのが NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis[1] という論文でした。これは微分可能な 3DCG レンダリングを介して 3 次元オブジェクトを表現する関数(ニューラルネットワーク)を訓練するという手法で、陰関数表現の発展形とみなすことができます。訓練に必要なデータセットは、オブジェクトを各視点から撮影した画像(とその視点の pose 情報)のみであり、教師 3D データを必要としません。また任意の視点から見た場合の非常に高精細な画像を生成可能です。 たいへん前置きが長くなってしまいましたが、本記事では、この NeRF 論文の内容を概説したのち、弊社で再現実装( TensorFlow 版が論文著者により公開されていますが、こちらは PyTorch 版)した結果を紹介します。

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

図1:NeRF 全体像

概要

NeRF はカリフォルニア大学バークレー校の研究者らが2020年3月に発表した研究です。Radiance Fields は直訳すれば「輝度場」で、論文の趣旨に沿っていえば、空間上の各座標に色と密度を対応付けるベクトル場になります。ここで密度というのはその点の不透明度、つまりそこに何かしらの物体が存在することを示す指標です。したがって物体が存在する座標の密度が高くなるような Radiance Fields を得ることができれば、三次元空間の形状を表現できたことになります。このベクトル場をニューラルネットワークで近似するというのが NeRF のアイディアです。座標と何らかの値を対応付ける関数を考える点で、陰関数表現と似ています。実際 Radiance Fields を近似するネットワークの構造は、陰関数表現手法のひとつである DeepSDF[5] を参考にしています。 問題はこの Radiance Fields をどのように近似するかということです。もっとも率直な方法は、あらかじめ作成しておいた座標と輝度のペアを用いて訓練することですが、データセットの作成に手間がかかります。そこで NeRF では Radiance Fields (のニューラルネットワーク表現)を用いて画像のレンダリングを行い、それと実際に撮影された画像とを比較することで Radiance Fields を訓練していきます。 図 2 をご覧ください。これは論文中からとってきたものです。 F_\Theta が Radiance Fields を表現するニューラルネットワークで、立方体(点線)で囲われているのが三次元オブジェクト、その外側に置かれているのが異なる視点からオブジェクトを見た場合のビューです。
図2:NeRFのレンダリング
この図を理解するためにはまず、これらのビューが生成される仕組み、つまりカメラ撮影の仕組みについて理解する必要があります。詳細な解説は書籍やインターネットに大量にある[7]のでそちらにゆずるとして、ごく簡単に概略を述べておきましょう。かなり単純化した説明になっていますので、細部が多少犠牲になっている点はご了承ください。 カメラの数学的モデルでは一般に、世界座標系とカメラ座標系のふたつの座標系を考えます。世界座標系は三次元オブジェクトやカメラが配置されている座標系で、カメラ座標系は特定のカメラの焦点を原点に置いた座標系です。カメラ一台の場合は世界座標系とカメラ座標系を区別する必要はないのですが、複数台のカメラを扱う場合は、世界座標系を基準に各カメラの位置関係を考えるほうが便利です。さて、あるカメラのカメラ座標系と世界座標系との関係を記述するパラメタを、そのカメラの外部パラメタと呼びます。外部パラメタには、カメラ座標系の、世界座標系に対する回転と平行移動の情報が含まれており、これを使うと、カメラ座標系上の点と世界座標系上の点とを対応付けることができます。ちなみに外部パラメタがあれば内部パラメタも存在し、こちらは焦点距離 f  やレンズ歪み係数(レンズ歪みについては今回は考えません)などを含みます。 世界観の説明が終わったので撮影の話に移りましょう。カメラ座標系上に xy 平面に平行で z=f の一枚の平面を考えます[8]。ここで f は関数ではなく焦点距離のほうです(単位はピクセルであることに注意)。この平面を画像平面と呼ぶことにしましょう。画像平面上の格子点( xy 座標がともに整数になる点)がいわゆるピクセルです。カメラ撮影とは、カメラ座標系の原点(焦点)から画像平面上の各ピクセルに向けて直線を伸ばしていき、その直線と交わった空間上の色を採取してくることにほかなりません。すなわち、画像上の点 (u,v) の色は、画像平面上の点 (u,v,f) と焦点 (0,0,0) を結んだ直線上に存在するのです。この直線が、空間上の点から焦点へとやってくる光線ということになります。(注意!:実際には、画像上の座標は画像左上を原点とし右方向を x 軸、下方向を y 軸とする座標系で考えるので、上記の (u,v,f) は正確には (u-cx,- v+cy,f) となります。 (cx,cy) は画像中心と呼ばれるパラメタで、画像平面とカメラ座標系 z 軸の(画像上での)交点です。)
図3:カメラモデル
だいぶ駆け足な説明になりましたが、最低限の準備はできたので NeRF の説明に戻りましょう。図中の目から延びるオレンジの直線が、先ほどの説明にもあった、焦点とピクセルを結ぶ直線(光線)です。Radiance Fields はこの直線上の各点について色と密度を返してくれるので、この直線に沿って Radiance Fields を積算してやれば一つの色を得ることができます。同じことを全ピクセルに対して行えば、一枚の画像を生成することができるわけで、これがいわゆるレンダリングです。未学習の F_\Theta でレンダリングしたところで出てくるのは無意味な画像ですが、これと実際の画像が一致するよう F_\Theta を更新していくことで、レンダリング結果は本物のそれに近づいていきます。結果として F_\Theta は三次元空間の表現 ( Radiance Fields ) になっていくというわけです。

Volume Rendering with Radiance Fields

前節で NeRF の概略を述べたので、これから詳細の解説に入っていきます。まず F_\Theta は正確には次のような関数です。

F_\Theta :(x,y,z,\theta,\phi) \rightarrow (R,G,B,\sigma)

ここで (x,y,z) は空間上の座標で、 (\theta,\phi) は視線の角度です。光の性質により、物体を見る角度によって色は変化するため、位置座標だけではなく視線の角度も入力に加えることにしています。また (R,G,B) は色、 \sigma は密度です。本手法では F_\Theta をマルチレイヤーパーセプトロンとして実装しています。ネットワークアーキテクチャについては後ほど触れる予定です。 ところで上記の式中では角度を (\theta,\phi) と表現していますが、代わりに今後は 3 次元単位ベクトルによる角度表現 \bf d を使います。また空間上の座標を {\bf x} = (x,y,z)^T と書くことにします。 {\bf d} を用いると、焦点の座標を {\bf o} として、光線 {\bf r} {\bf r} (t) = {\bf o}+t {\bf d} という具合に t でパラメタ表示できます。 t は焦点からの距離です。 さて、ここから F_\Theta を色 {\bf c(x,d)} 、密度 \sigma({\bf x}) と分けて書くことにします。するとvolume renderingは以下のような積分の式で書くことができます。 C({\bf r}) は光線 {\bf r} の焦点から見た色で、 t_n, t_f はそれぞれレンダリングにおいて考慮する距離の下限、上限を意味します。やっていることは単純で、色と密度をかけたものを光線上で積分するだけです。

C({\bf r}) = \int_{t_n}^{t_f} \! T(t) \sigma({\bf r}(t)) {\bf c}({\bf r}(t), {\bf d}) \, \mathrm{d}t, ~ \mathrm{where} ~ T(t) = \exp(- \int_{t_n}^t \! \sigma({\bf r}(s)) \, \mathrm{d}s)

ただし T(t) は、ある点から焦点へと向かう光が、それより前(焦点側)にある点によって妨げられる状況を表現しています。 {\bf r}(s), ~ (t_n \leq s < t) に密度の高い点があった場合、exponential の中身が小さくなるため T(t) 0 に近づき、 {\bf r}(t) から出た光は C({\bf r}) に影響しなくなるというからくりです。 Volume rendering の仕組みは上記の通りなのですが、この積分は計算しづらいため離散化して総和計算に書き換えます。そのさい積分区間 [t_n, t_f] を区切ってやる必要があるわけですが、NeRF ではこの区切り方に一工夫加えています。その工夫については後で触れるとして、積分区間が t_1,\cdots,t_N によって区切られたとしましょう。すると volume rendering は以下のように書き換えられます。

\hat{C}({\bf r}) = \sum_{t_n}^{t_f} T_i (1 - \exp(-\sigma_i \delta_i)) {\bf c}_i, ~ \mathrm{where} ~ T_i = \exp(- \sum_{j=1}^{i-1} \sigma_j \delta_j)

ただし、 {\bf c}_i \sigma_i はそれぞれ {\bf x}_i = {\bf o} + t_i {\bf d} における色と密度で、また \delta_i = t_{i+1} - t_i です。これらの式はニューラルネットワークフレームワークで提供されている backprop 可能なオペレータのみで書けるので、ニューラルネットワークの訓練に利用できるというわけです。

Hierarchical volume sampling

さて 3D レンダリングを介してニューラルネットワークを訓練する方法はわかりました。本質的な部分の説明は以上で終わりなのですが、論文ではさらにいくつかの工夫を加えています。ひとつ目は、訓練時に「粗い ( coarse )」レンダリングと「細かい ( fine )」レンダリングの二度のレンダリングを行うというものです。二度のレンダリングの違いは、先ほど触れた積分区間の区切り方 t_i  の決定方法にあります。 粗いレンダリングでは、 [t_n,t_f] N_c 個(論文では N_c=64 )の区間に分割し、それぞれの区間から一様分布に従って一つ t_i をサンプリングしています。決め打ちではなくランダムにしているのは、ニューラルネットワークを滑らかにするためです。摂動する入力に対してニューラルネットワークを訓練することによって、連続的な三次元空間表現を得る狙いがあります。 一方の細かいレンダリングでは、粗いレンダリングの結果を利用して、物体の存在しそうな場所(密度の高い場所)から重点的にサンプリングを行います。こうすることによってむやみにサンプリング点数を増やすことなくレンダリング結果を精緻化できるわけです。もう少し具体的に述べておくと、粗いレンダリングにおける T_i (1-\exp⁡(-\sigma_i \delta_i ) ) の比率(これは各点のレンダリング結果への影響度とみなせます)に従って N_f 個(論文では N_f=128 )の区切り t_i をサンプリングし、これと粗いレンダリングで使った区切りを合わせたものを最終的に利用します。 ちなみに論文では、これら二度のレンダリングにおいてそれぞれ異なる(同一アーキテクチャの)ニューラルネットワークを使っています。細かいレンダリングにおいて最適な色・密度が、粗いレンダリングにおいても最適である保証はないので、同一のネットワークを使うと学習が不安定になるのではないかと思います。

Positional encoding

これまでの説明では 3 次元ベクトル {\bf x, d} をニューラルネットワークの入力とするような書き方をしてきましたが、実は {\bf x, d} をそのまま使うには問題があります。というのも、それが表現している三次元オブジェクトの都合上、各点の色・密度 {\bf c}, \sigma {\bf x, d} の微細な変化に対してめまぐるしく変化するわけですが、実はニューラルネットワークはこの手の高周波な関数の近似が苦手なのです。そこで本論文では著者らが positional encoding と呼んでいる手法を使って {\bf x, d} を高次元の空間に埋め込んでいます。この埋め込み表現が高周波であれば、ニューラルネットワーク自体は低周波な関数を近似するだけでよい、というのがみそです。これがふたつ目の工夫になります。 本論文では以下のような関数 \gamma {\bf x, d} を埋め込んでいます。 L {\bf x} については 10 で, {\bf d} については 4 を採用しています。結果として \gamma({\bf x}), \gamma({\bf d}) はそれぞれ 60 次元、 24 次元のベクトルとなり、これらがニューラルネットワークに入力されます。

\gamma(p)=(\sin(2^0 \pi p), \cos(2^0 \pi p) , \cdots , \sin(2^{L-1} \pi p), \cos(2^{L-1} \pi p) )

実装

Radiance Fields としては以下のようなアーキテクチャのネットワークを利用しています(図4)。矢印は Linear 層を表し、線の違いは活性化関数の違いを表現しています。黒は ReLU、点線はシグモイド、オレンジは活性化関数なしです。矩形はベクトルを表し、中の数字は次元数です。また ”+” はベクトルの concatenate を意味します。 位置情報 {\bf x} を二か所から入力し(これは DeepSDF を真似たそうです)、角度情報 {\bf d} はかなり後段になってから入力しているのが特徴でしょうか。密度 \sigma は見る位置によって変わってほしくないということで、 {\bf d} を入力する前に \sigma を取り出しています。シグモイド関数によって RGB [0,1] の値におさめられます。
図4:ネットワーク構造
学習は一般的な分類タスクなどと違って、画像単位ではなく光線単位で行います。論文ではバッチサイズ 4096 、最適化アルゴリズムには Adam を使い(ハイパーパラメタは論文を参照してください)、Nvidia V100 GPU で 1~2 日煮込めばよいとのことでした。これでなかなかコンパクトなニューラルネットワークだなあと感じるのは、感覚がおかしくなってきているのかもしれません。

結果

NeRF の学習結果については、著者プロジェクトページ[1]の動画を見てみるといろいろ載っており、さまざまな視点から見た高精細な画像を生成可能であることがわかります。視点による反射光の違いなども表現できています。
図5:比較
これも論文中の図なのですが、LEGO 製ブルドーザーを NeRF に学習させたものを例に挙げて View Dependence (角度情報 {\bf d} )と positional encoding の効果を調べています。当然といえば当然ですが、角度情報がない場合は履帯の光の反射を反映できていません。また positional encoding がない場合はブロックの微細な形状を再現できていないことがわかります。

再現実験について

ここからはわたしの行った再現実験の話です。最終的なスクリプトはこちらにあります。人様に見せられるようなものでもないですが、ご参考までに。ちまたでは眉を顰められがちな(?) jupyter notebook 一本という構成です。著者実装よりはだいぶ小さくまとまっているので(低機能ともいう)理解はしやすいのではないかと思います。 唐突に NeRF を実装してみようと思ったのは二週間ほど前で、SLAM 系の勉強・実験をしていて頭が煮詰まっていたのと、生成されるビューの奇麗さを見て感動したからでした。その時点では著者実装は公開されていなかったような気がしますが、わたしの見落としかもしれません。というわけで特に公式実装は参照せず再現実装しています。 三次元の幾何学的な計算はよくやっているのでそんなに時間はかからないだろうと思い、実際、とりあえず動くものができたのは二日後くらいでした。が、実はかなり最初のほうに致命的なバグを埋め込んでおり、そのデバッグにかなり時間を取られました。このバグについては後述します。 この手の論文を実装する際は、データセットの準備・理解から入るのが最も楽だというのが個人的な認識で、今回は論文中で利用されていた DeepVoxels[9] データセットなるものを眺めながら実装の方針を決めました。このデータセットは多視点から撮影(レンダリング)された三次元オブジェクトの実画像および CG 画像を含んでおり、各カメラの内部/外部パラメタも付属しています。最初はできるだけ簡単なデータで試してみるのがよいだろうということで、 CG 画像のほうを使うことにしました。
図6:利用した三次元オブジェクトのひとつ。謎の物体
カメラ外部パラメタを調べてみると、どのカメラもおおむね原点を向いていて、各カメラの座標は各軸 [-2, 2] あたりに収まりそうです。Positional encoding のためには、各座標値は [-1, 1] の範囲に収まる必要があるので、本当はきちんとカメラパラメタを正規化する必要があったわけですが、今回は {\bf x, d} を tanh に通してお茶を濁すことにしています。たぶん大きな問題はないはずです。 いくつか手間取った点。まず細かい方のレンダリングに使う区間のサンプリング方法には少し悩みました。今回の実装では、 [0,1] の一様乱数からサンプリングした値 u を、以下のような区分的な一次関数 t=f(u) で変換しています(図7)。もう少しうまいやり方はあると思いますが、速度的・機能的に問題はなさそうです。
図7:区分的な一次関数
それから、背景の問題。学習に使ったデータは背景が白色になっていました。最初はこのことを特に気にせずネットワークを訓練していたのですが、よく考えてみると、学習しているニューラルネットワークからすればこの白色光はどこから来た光なのかいまいちわからないわけで、最終的に背景色にレンダリング結果を足し合わせる方法に変えました。あとで公式実装を読んでみるとやはり背景色を指定するオプションがあり、論文に書かれてはいないが自明に気にするべきこうした点について自分はまだまだ経験が足りないなと思いました。 そんなこんなでちまちま調整していくと、だいぶそれらしい画像が出てくるようになりひとまず喜んでいたのですが、しかし論文に記載されていた 2 日という期間学習を回しても論文レベルの画像は出てくるようになりません。どこで失敗しているのだろうかとレンダリングの計算を見直したり学習率を変えてみたり活性化関数をいじってみたりと様々なことを試した挙句、ようやくデータセットの作成方法を間違っていたことに気づきました。 今回の再現実装では、あらかじめ学習データの全ピクセルを光線に変換し numpy 配列として保存していました。光線単位で学習を行う都合上、毎回画像を読み込んでピクセルを光線に変換するのでは無駄が多かったからです。先に述べたように光線は {\bf r} (t) = {\bf o}+t {\bf d} で表現されるので、各光線の {\bf o, d} を計算しておけばよいことになります。これにはカメラ外部パラメタを利用します。 外部パラメタには回転行列 {\bm R} と平行移動ベクトル {\bf t} が含まれており、これを使って {\bm R} {\bf x}_c + {\bf t} とやるとカメラ座標系上の点 {\bf x}_c を世界座標系上の点 {\bf x} に変換できます。たとえばカメラ座標系の原点(焦点) {\bf o}_c = (0,0,0)^T は、世界座標系上では {\bf t} の位置にあることが分かるわけです。 ややこしいのは {\bf d} の算出です。これは、各カメラ焦点の座標から視線方向に焦点距離 f だけ離れた平面を考え、この平面上のピクセルと焦点の位置関係を考えれば計算できます。見方を変えると、カメラ座標標系上の z=f 平面上(画像平面)にピクセルを配置し、これを外部パラメタで世界座標系上に変換したのち、それから焦点座標を引いてやればよいわけです。式で書くと次のようになります。 {\bf x}_c は画像平面上のピクセルです。(実際には {\bf d} はさらに正規化してノルム 1 にする必要があります。)

{\bf d} = {\bm R} {\bf x} + {\bf t} - {\bf o}

ミスというのは実はここにあり、なんと最後に {\bf o} を引くのを忘れていたのです[10]。結果としてデータセットは空間的につじつまの合わないものとなり、つまりわたしはニューラルネットワークに滅茶苦茶な世界を見せて「学べ!」と強要していたことになります。これはニューラルネットワークに対する明らかな虐待であり、彼らに人権が認められた暁には訴えられてもしょうがない……という冗談はさておき、間違った設定下でもある程度学習してしまうというニューラルネットワークの表現力はデバッグ作業においてはなかなか厄介です。学習フローをじっくり丁寧に確認する必要があります。 さて、すべてのバグをつぶした(はず)最終的なモデルによるレンダリング結果は以下のようになります(図8-10)。光線を区切ってレンダリングしている都合上、微妙に細部を再現できていない部分もありますが、ほとんど訓練データと見まがう画像を生成できています。これらは2日ほど訓練したものですが、1 時間程度の訓練でも十分見られる画像を生成できるようになります。ぜひ試してみてください。
図8:謎の物体。容量の関係で gif 版
図9:花瓶。複雑な模様も再現できている
図10:バス。やや治安が悪そう

まとめと感想

本記事では、NeRF を中心にニューラルネットワークによる三次元表現手法について解説し、また NeRF の再現実験の結果を紹介しました。NeRF はシンプルな手法で複雑な三次元オブジェクトを表現することができ、この方面の今後の展開が期待されます。たとえば NeRF は {\bf x, d} に対して RGB, \sigma を返しますが、ここで \sigma の代わりに直接深度を返すようにできないか(訓練には再投影誤差を使う?)とか、マルチレイヤーパーセプトロンよりも三次元表現に適切(学習が速いとか、三次元オブジェクトについての自然な仮定が入っているとか)なネットワーク構造があるのではないかとか、個人的に試してみたいところです。NeRF 的な方法を利用した三次元物体計測の仕組みを作って精度評価してみても面白いかもしれません。何かしらの成果が出れば、またブログ等でご紹介したいと思います。 最後になりますが、ALBERT ではリサーチャー・アナリストを募集しています。ニューラルネットワークに現実世界を教えてみたいという方がいらっしゃいましたら、ぜひご応募ください。お待ちしています。

参考文献など

  1. Mildenhall, B., Srinivasan, P.P., Tancik, M., Barron, J.T., Ramamoorthi, R., Ng, R., 2020. NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis. arXiv:2003.08934 [cs].
    プロジェクトページ: http://www.matthewtancik.com/nerf
  2. Mikolov, T., Sutskever, I., Chen, K., Corrado, G.S., Dean, J., 2013. Distributed Representations of Words and Phrases and their Compositionality, in: Burges, C.J.C., Bottou, L., Welling, M., Ghahramani, Z., Weinberger, K.Q. (Eds.), Advances in Neural Information Processing Systems 26. Curran Associates, Inc., pp. 3111–3119.
  3. Kingma, D.P., Welling, M., 2014. Auto-Encoding Variational Bayes. arXiv:1312.6114 [cs, stat].
  4. Eslami, S.M.A., Rezende, D.J., Besse, F., Viola, F., Morcos, A.S., Garnelo, M., Ruderman, A., Rusu, A.A., Danihelka, I., Gregor, K., Reichert, D.P., Buesing, L., Weber, T., Vinyals, O., Rosenbaum, D., Rabinowitz, N., King, H., Hillier, C., Botvinick, M., Wierstra, D., Kavukcuoglu, K., Hassabis, D., 2018. Neural scene representation and rendering. Science 360, 1204–1210. https://doi.org/10.1126/science.aar6170
  5. Park, J.J., Florence, P., Straub, J., Newcombe, R., Lovegrove, S., 2019a. DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation. Presented at the Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 165–174.
  6. Chen, Z., Zhang, H., 2019a. Learning Implicit Fields for Generative Shape Modeling. Presented at the Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 5939–5948.
  7. オンラインで読めるものとしては、MathWorks の『カメラキャリブレーションとは』や OpenCV の『カメラキャリブレーションと3次元再構成』が分かりやすかったです。
  8. カメラ外部パラメタによっていかようにもなるので、カメラ座標系の軸の取り方は任意です。ただし一般的には 3 番目の軸がカメラ視線方向になるようモデル化されます。
  9. Sitzmann, V., Thies, J., Heide, F., Niessner, M., Wetzstein, G., Zollhofer, M., 2019. DeepVoxels: Learning Persistent 3D Feature Embeddings. Presented at the Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 2437–2446. Sitzmann, V., Thies, J., Heide, F., Nießner, M., Wetzstein, G., Zollhöfer, M., 2018. DeepVoxels: Learning Persistent 3D Feature Embeddings. arXiv:1812.01024 [cs].
    データセットは https://vsitzmann.github.io/deepvoxels/ にてダウンロードできます。
  10. {\bf o = t} が分かっていたならなぜ単に {\bm R} {\bf x} を計算しなかったのかと不思議に思われそうですが、データセットでは外部パラメタが {\bm R}, {\bf t} をまとめた 4×4 行列で格納されており、その辺に敗因があります。

動画認識手法の紹介とキャプション生成手法Masked Transformerについての解説

$
0
0

はじめに

こんにちは、プロジェクト推進部の水船です。前の記事でもご紹介した先進技術WGでは今、動画分析を重要テーマとして調査しています。今回は2018年に提案された手法で少し古いですが、Masked Transformer [1]という動画キャプション生成モデルについての解説をしていきます。またそれに関連して、動画認識のための諸手法についてもざっくりと紹介します。Masked TransformerのPyTorch実装も公開しているのでご覧ください。

動画認識について

近年では、深層ニューラルネットワークが画像認識において非常に目覚ましい成果を出しています。しかし、我々人間は静的な一つの場面ではなく、動的で連続的な場面を元に学習しているはずです。ニューラルネットは、画像だけだと「どんな物体があるか」は分かっても、「どのような動きか」は学習できません。したがってロボティクスやゲームといった「動きのある」分野において、動画を元に学習させることは価値があると思われます。

しかしながら、動画を深層ニューラルネットワークの枠組みでモデル化するには、画像とは違った工夫が必要です。画像は縦×横の2次元で表現できます(RGB画像の場合はチャネル方向があるので厳密には3次元です)が、動画はさらに時間方向の3次元で表現される点が大きく異なります。この時間的な情報をどうモデル化するかが課題となってきます。

基本的な動画認識モジュール

「動き」をコンピューターに理解させる上で、もっとも単純なタスクが「行動認識」と呼ばれるタスクです。行動認識では動画を入力として、その行動ラベルを予測します。すなわち、画像分類の動画版と言えます。画像認識では2D Convolutionがよく用いられていますが、動画認識では3D Convolutionを用いることが多いです。時間 L よりも小さいカーネルサイズ d を設定する事で、時間方向に局所的な特徴を獲得できます。

図1 3D Convolutionの概略図 ([2] Fig 1より引用)

C3D [2]という手法が初期の代表的なネットワークになっています。この手法では3D Convolutionの設計方法(カーネルサイズの決め方など)を提案しましたが、依然としてOptical Flowも加えたTwo-Stream CNNに性能が劣っていました。また、当時学習データセットのサイズが不十分だったため、ニューラルネットの層も浅いものでした。そこでI3D [3]という手法はOptical Flowも入力に加え、大規模なデータセットで学習できる層の深いネットワークを提案しました。

図2 Two-Stream CNNの概略図([3] Fig 2より引用)

その後も様々な工夫がなされており、例えばS3D [4]という手法ではI3Dと比較して精度を保ちながら軽量なネットワークを提案しています。これらのネットワークはこれから説明する動画キャプション生成タスクでも使用されており、動画認識を行う上では重要になります。

動画キャプション生成とは

行動認識では動画を入力として行動ラベルを出力する一方、動画キャプション生成は動画を入力として、その説明文を生成するタスクです。行動ラベルと比べると説明文の方が情報量は多いですが、その分複雑性が増すので難しさがあります。私見ですが、人間の素晴らしさは言語を扱うところにあると考えています。視覚的情報(動画)から言語的な説明ができれば、コンピューターは動画をかなり理解できるようになっていると言えるのではないでしょうか。

動画キャプション生成タスクの中でも、一つの動画に対して一つのキャプションしか生成しない(Vanillaな)Video Captioningと、複数のイベントに対するキャプションを生成するDense Video Captioningという2つのタスクに分かれています。複数のキャプションを生成する理由としては、(長めの)動画には通常複数のイベントがあることが想定され、単一のキャプション生成だけではイベントの全てを捉えられないことが挙げられます。YouTubeにあるような動画は比較的長め(数分)の物が多いので、より現実的な動画をモデリングすることになります。

この Dense Video Captioning タスクでは、複数のキャプションとそれに対応するセグメントの出力が求められます。このセグメントというのは、そのキャプションがどこからどこまでのフレームに対応するかを示し、動画フレームの始点と終点で表現できます。これをわかりやすく示したのが下の図です。Dense Video Captioningでは一つの動画に対して複数のキャプションがアノテーションされており、それぞれにフレームの区間(赤線)が振られています。

図3 Dense Video Captioningの概略図 ([5] Fig 1より引用)

このタスクはICCV 2017に初めて提案されました [6]。ここで提案された動画キャプション生成モデルは、LSTMを元にしています。一方、今回紹介するMasked Transformer [1]という手法では2017年に提案されたTransformer [7]を利用した動画キャプション生成モデルとなっています。この手法では以下の新規性があります。

  • RNNではなくTransformerを用いたDense Video Captioning
  • キャプション生成と、セグメント提案に一貫性を持たせるため、End-to-Endでの学習を可能にする微分可能なマスク生成の枠組みを提案

後続の研究でもMasked Transformerがベンチマークとして取り上げられている印象です。例えば、VideoBERT [8]のキャプション生成タスクの比較対象・ベースネットワークとして扱われています。

詳細は次の章で説明しますが、今回Masked Transformerに着目した理由は、1つ目が論文中でLSTMからTransformerに変更することでキャプションの質の向上を示したから(図4)、2つ目が学習をシンプルに行えるからです。近年のTransformerが自然言語タスクで大きな成果を上げていることを踏まえると、今後はこのモデルを元にさらなる工夫を加えると良いのかなと思っています。

図4 ActivityNet Captionデータセットでの実験結果([1] Table 1より引用)

余談ですが、その他に個人的に面白いと思った研究としては[9, 10]があります。[9]では過去と未来両方の動画コンテクストを利用し、セグメント提案とキャプション生成を行います。Masked Transformerでは、セグメントの提案に過去と未来のコンテクストを暗黙的に利用していますが、キャプション生成には過去と未来のコンテクストを考慮していない点が大きく異なります。また、[10]では提案されたセグメントの時間的関係性を考慮する事で、提案セグメントをさらに洗練しています。また、キャプション間にも依存関係を仮定しており、Masked Transformerとはセグメントとキャプションを独立的に生成している点で大きく異なります。

Masked Transformerについて

さて、本題のMasked Transformerについての解説です。モデルの流れとしては、以下のステップを踏みます。

  1. Video Encoder Stackで動画特徴をエンコードする。
  2. Proposal Decoderで、事前に用意したアンカーに対してイベントの確率とオフセットを出力。
  3. 動画フレームのどの部分がイベントに対応するかのマスクを作成。
  4. Video Encoderで出力したEmbeddingとProposal Decoderで出力したマスクを元に、Caption Decoderで文章を生成します。
図5 Masked Transformerの全体図([1] Fig 1より引用)
モデルの全体図を上図に示しています。以下でそれぞれについて説明していきます。

Video Encoder Stack

まず、画像フレームを学習済みモデルで変換します。原論文では、Resnet200 [11]の画像特徴と、BN-Inception [12]のOptical Flow特徴を使用しています。さらに追加の特徴として、各フレームが何番目であるかをニューラルネットに教えるために、Transformerで使用されるPositional Encodingを使用しています。これらの特徴をFC層とSelf-Attentionを用いる事で動画情報をエンコードします。

画像フレームを学習済みモデルで変換すると述べましたが、画像フレームに対してCNNを適用、学習させた方が精度が高くなりうることが論文中でもコメントされています。特に細かい情報を扱う場合は気にした方が良いと思われます。例えば料理動画で頻出するであろうキャベツとレタスの区別は、学習済み重みモデルを用いただけではできない可能性があります。ちなみに私にもキャベツとレタスの区別は難しいです。。。

ただしCNNを学習させる場合、当然メモリの消費は大きくなります。原論文では480フレームを使用しているので、C3Dなどのベースネットワークを単純に学習させようと思うととんでもないメモリ消費になるはずです。

Proposal Decoder

Dense Video Captioningでは、キャプションだけでなく、どこからどこまでのフレームがそのキャプションに対応するかのセグメントも出力する必要があります。これを実現するため、Masked TransformerではSSD [13]のような物体検知アルゴリズムでも用いられる、アンカーベースのモデルを使用しています。アンカーとは事前に定義した参照セグメントで、セグメントの中心点 c_a と長さ l_a を保持しています。直接セグメントを予測するのではなく、このアンカーとの差分を予測することで間接的にセグメントを予測します。

モデルはこの参照点に対して「そのアンカーセグメント中にイベントがある確率 P_e」と「そのアンカーセグメントの中心点および長さとの差分 \theta_c, \theta_l」を出力します。そして、これらの情報を組み合わせることで予測セグメント [S_p, E_p] を以下のように計算することができます。


c_p = c_a + \theta_c l_a, l_p = l_a \exp\{\theta_l\} \\ S_p = c_p - l_p/2, E_p = c_p+l_p/2


なお、\theta_c, \theta_l はVideo Encoder Stackで出力したEncodingを入力として、1-D Convolutionなどで計算できます。

Differentialble Proposal Mask

以上で予測セグメントは計算できたのですが、Captioning Decoderに動画のどのフレームに着目するかの情報を与える必要があるため、マスクを作成する必要があります。マスクそのものは[S_p, E_p]の区間を全て1に、その他を0にすることで定義できるように思えます。しかし、このような離散的なマスクを作成した場合キャプションからProposal Decoderを学習することができないことになります。そこで、まず以下のような連続的なマスクを作成します。

f_M(S_p, E_p, S_a, E_a, i) = \sigma(g([\rho(S_p, i), \rho(E_p, i), \rho(S_a, i), \rho(E_e, i), Bin(S_a, E_a, i)]))\\ \rho(pos, i) = \left\{\begin{array}{cc} \sin(pos/10000^{i/d}) & i \ {\rm is}\ {\rm even} \\ \cos(pos/10000^{(i-1)/d}) & {\rm otherwise} \end{array} \right. \\ Bin(S_a, E_a, i) = \left\{\begin{array}{cc}1 & {\rm if} \ i \in [S_a, E_a] \\ 0 & {\rm otherwise} \end{array} \right.


ここで g はMLPで、\sigma はシグモイド関数です。また、iはフレームのインデックスで、dはEmbeddingの次元数です。\rhoはPositional Encodingとなっており、予測されたセグメントとアンカーのセグメントをエンコーディングします。このような連続的なマスクは先ほど示した離散的なマスクと比較すると正確性に乏しいですが、以下のように離散的なマスクと連続的なマスクを組み合わせることで微分可能かつ正確なマスクを作成することができます。

f_{GM}(S_p, E_p, S_a, E_a, i) = P_e Bin(S_p, E_p, i) + (1-P_e) f_M(S_p, E_p, S_a, E_a, i)

ちなみにですが、このマスクはN \times Tの行列で、Nはサンプルの数、Tはフレーム数です。サンプルの数は、学習時はバッチサイズで、推論時は提案されたセグメントの数になります。
マスクをかける際は、

\hat F^l = f_{GM} \odot F^l


というelement-wise multiplicationでマスクを実現できます。ここで F^l は、Video Encoderで出力された l 番目のレイヤの特徴です。

Captioning Decoder

Captioning Decoderは通常のTransformerとほぼ変わりません。ただし、Encoderの情報が動画情報からであるという点と、動画のどのフレームに注目するかを情報として与えるためのマスクを使用している点に特徴があります。

損失関数

学習させるべき損失関数は4種類あります。
  • キャプション文に関する損失関数
  • アンカーオフセットを予測させるための損失関数
  • マスクに関する損失関数
  • 各アンカーにイベントがあるかどうかを学習させる損失関数

マスクの損失関数ですが、これは出来るだけ提案セグメントの離散マスクに近づくように学習させます。したがって、 Bin(S_p, E_p, i) を予測ラベルとします。具体的な損失関数の数式は論文を参照してください。

学習時の注意点

学習方法は少し工夫が必要です。学習の1エポックの単位は動画の数ではなくキャプションの数なので、同じ入力でも異なる出力(キャプションとセグメント)をさせる必要があります。

まずセグメントの学習で注意する点は、ある区間のキャプションを学習させる時はpositiveだったアンカーが、別の区間のキャプションを学習させる時はnegativeだというラベルづけになってしまうことです。したがって、各イテレーションで P_e に対するラベル付けを工夫する必要があります。ここでは、positiveラベルはキャプションに対応する正のアンカーを使用するが、negativeラベルはキャプションに依存させず、動画全体から見て何もイベントがない区間だとみなします。具体的には、ある動画の全てのセグメントとのIoUが、一つも0.1を超えない場合はnegativeであるとみなします。これによって、本来positiveなアンカーがnegativeだと判定されることを防いでいます。

ちなみに元実装ではpositiveとnegativeを均等にサンプリングしているようなのですが、私は物体検知の学習方法を踏襲してHard Negative Miningを利用しています。この学習方法は色々やりようがあると思います。例えば、positiveなラベルも同様にキャプションに依存させずに定義した方が学習が安定するかもしれません。また、negativeだとみなすIoUの閾値は論文では0.3でしたが、私は0.1に設定しました。この理由は、0.3にしてしまうと推論時に何もセグメントを提案しないという現象が起きてしまったためです。個人的にこのパラメータはかなり重要だと考えていて、高くしすぎると不必要にnegativeと判断してしまい、低くしすぎると予測セグメントの精度が落ちると考えられます。セグメント提案で意図せぬ挙動が起きる場合は、この値をチューニングすると良いかもしれません。

キャプションの学習で注意することは、各イテレーションごとに、フレームのどの部分を活用するかを変える必要がある点です。キャプションに関係のないフレームの情報を使っても意味がありません。したがって、positiveなアンカーを各サンプルごとに一つだけサンプリングすることで、Caption Deocderに渡すマスクを出来るだけ正確な情報にしています。

再現実験について

データセットは、よく使われるものとして、以下が挙げられます。
  • ActivityNet Captions [6]: 比較的大きなデータセットが特徴。
  • YouCook2 [14]: 数は少ない(AcitivityNetの1/10)が、料理動画に特化。

ここでは、学習・評価に時間をかけたくなかったため、YouCook2データセットを利用します。すでに学習済みのモデルを使用するため、それほど学習には時間がかからないはずです(ただし、もともとのモデルに冗長なパラメータがあったため、一部は学習し直しています)。手元のNVIDIA V100 GPUで学習しましたが、20エポック程度ならば1時間足らずで計算を回せました。

それでは、生成されたキャプションを確認しましょう。こちらの動画を入力にした推論結果が以下のようになります。各色がセグメントとそれに対応するキャプションになっています。また、生成したキャプションは提案セグメントから色付けを行なっています。確認してみると、それっぽいキャプションが作成できていることがわかりますね。ただし、細かい部分で間違いが起きていたり(レタスとキャベツを間違っていたり)、一部のキャプションを生成できていなかったりします。この辺りは課題ですね。

実装については、すでに著者実装が公開されていますが、PyTorchのバージョンが0.4で古いのと、学習が非効率な点などを踏まえて、新たに実装し直しました。また、元の実装と比べても読みやすくなっているはずです。最終的なスクリプトはこちらです。

図6 正解説明文と、生成された説明文

終わりに

本記事では動画認識の手法の紹介および、Dense Video Captioningというタスクに対するモデルとして、Masked Transformerという手法を解説し、その再現実験を紹介しました。実験した感想としては、意外とそれっぽい文章が作れるのだなと思う一方、まだまだ課題が多いなと感じました。[9]や[10]のように、動画という特性をより活用すべきだと思いますし、Masked Transformerに渡す入力の設計ももう少し考えるべきだと思います。原論文ではResNet [11]の学習済み重みモデルを用いていますが、例えばVideoBERT [8]では自己学習された重みモデルを用いてキャプション生成を行なったりしています。まだまだこれからという印象です。そろそろCVPRやECCVが開催されるので、どのような動画キャプション生成の研究が出てくるかは興味深いところですね。また、自然言語モデルの方でももっと工夫ができると思います。最近ではReformer [15]などTransformerを工夫したモデルが提案されているので、Masked Reformerを作成しても良いかもしれません。

最後になりますが、先進技術部では今後も動画分析の調査や研究に力を入れていく予定です。動画は情報に富んでいて、その分様々な技術が要求される印象です(つまり研究しがいがあるという事ですね!)。ALBERTには様々なバックグラウンド・知識を持った人がいるので、社内チャットに困ったことを投げれば様々な視点からの回答が返ってきます(非常に助かっています)。より多様なメンバーが集まると、よりALBERTの強みが増すのかなと期待しています。ALBERTではリサーチャー・アナリストを募集しています!ご興味のある方はこちらをご覧ください!

参考文献

  1. Zhou, L., Zhou, Y., Corso, J. J., Socher, R., & Xiong, C. (2018). End-to-end dense video captioning with masked transformer. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 8739-8748).
  2. Tran, D., Bourdev, L., Fergus, R., Torresani, L., & Paluri, M. (2015). Learning spatiotemporal features with 3d convolutional networks. In Proceedings of the IEEE international conference on computer vision (pp. 4489-4497).
  3. Carreira, J., & Zisserman, A. (2017). Quo vadis, action recognition? a new model and the kinetics dataset. In proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 6299-6308).
  4. Xie, S., Sun, C., Huang, J., Tu, Z., & Murphy, K. (2018). Rethinking spatiotemporal feature learning: Speed-accuracy trade-offs in video classification. In Proceedings of the European Conference on Computer Vision (ECCV) (pp. 305-321).
  5. Li, Y., Yao, T., Pan, Y., Chao, H., & Mei, T. (2018). Jointly localizing and describing events for dense video captioning. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 7492-7500).
  6. Krishna, R., Hata, K., Ren, F., Fei-Fei, L., & Carlos Niebles, J. (2017). Dense-captioning events in videos. In Proceedings of the IEEE international conference on computer vision (pp. 706-715).
  7. Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … & Polosukhin, I. (2017). Attention is all you need. In Advances in neural information processing systems (pp. 5998-6008).
  8. Sun, C., Myers, A., Vondrick, C., Murphy, K., & Schmid, C. (2019). Videobert: A joint model for video and language representation learning. In Proceedings of the IEEE International Conference on Computer Vision (pp. 7464-7473).
  9. Wang, J., Jiang, W., Ma, L., Liu, W., & Xu, Y. (2018). Bidirectional attentive fusion with context gating for dense video captioning. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 7190-7198).
  10. Mun, J., Yang, L., Ren, Z., Xu, N., & Han, B. (2019). Streamlined dense video captioning. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 6588-6597).
  11. Simonyan, K., & Zisserman, A. (2014). Very deep convolutional networks for large-scale image recognition. arXiv preprint arXiv:1409.1556.
  12. Ioffe, S., & Szegedy, C. (2015). Batch normalization: Accelerating deep network training by reducing internal covariate shift. arXiv preprint arXiv:1502.03167.
  13. Liu, W., Anguelov, D., Erhan, D., Szegedy, C., Reed, S., Fu, C. Y., & Berg, A. C. (2016, October). Ssd: Single shot multibox detector. In European conference on computer vision (pp. 21-37). Springer, Cham.
  14. Zhou, L., Xu, C., & Corso, J. J. (2018, April). Towards automatic learning of procedures from web instructional videos. In Thirty-Second AAAI Conference on Artificial Intelligence.
  15. Kitaev, N., Kaiser, Ł., & Levskaya, A. (2020). Reformer: The Efficient Transformer. arXiv preprint arXiv:2001.04451.

FAQ 検索の精度改善の取り組みについての紹介

$
0
0
こんにちは。プロダクト開発部で弊社の AI・高性能チャットボット「スグレス」の開発および自然言語処理の R&D をしている中井です。

チャットボットとは、「チャット」と「ボット」を組み合わせた言葉で、人工知能 (AI) を組み込んだコンピューターが人間に代わって一定の会話を自動化する「自動会話プログラム」のことです。スグレスは人工知能 (AI) を搭載した高性能チャットボットサービスです。

スグレスには Frequently Asked Question (FAQ) 検索と呼ばれる、ユーザーが入力したメッセージ (以下、クエリと呼ぶ) から、適切な回答候補を推測する機能があります。

今回は、FAQ 検索の精度改善の取り組みについて紹介します。

はじめに

今回は FAQ 検索を 4 つの異なるモデルで実装し、日本語のデータセットによる比較実験をした結果を紹介します。
  1. BM25 による検索スコアを使った方法
  2. LASER の文埋め込みによる類似度検索による方法
  3. BERT による検索モデル
  4. Sentence-BERT の文埋め込みによる類似度検索による方法

FAQ 検索とは

FAQ 検索とは、事前に定義された問い合わせ文と回答文のペアからなる FAQ の集まりから、ユーザーからの自然文による問い合わせに対して、より適合する回答が上位になるように FAQ を並べ替えて応答するタスクと定義します。いわゆる情報検索におけるランキング問題と考えられますが、このブログでは FAQ に限定して取り組むため、FAQ 検索と呼ぶことにします。

FAQ 検索システムの仕事は、クエリと FAQ の適合の度合いを表すスコアを推定することです。あとは、全ての FAQ をスコアの降順に並べるだけです。多くの検索システムがこの方法をとっています。スコアの推定の方法が検索システムの性能を決定する大きな要因となります。

クエリは、ユーザーが必要とする情報を自然文である質問文で表現したものです。クエリと FAQ の適合の度合いとは、その FAQ の話題がユーザーの必要としていた情報とどれだけ合致しているかを表すものと定義します。一方、ユーザーが必要としている情報そのものをシステムが知ることはできません。このため、システムはクエリと FAQ のみで適合性スコアを推定します。

また、FAQ は問い合わせ文と回答文で構成されるので、スコアの推定にはそのどちらも考慮するのが自然ですが、本記事ではクエリ と FAQ の問い合わせ文から推定しています。これは、クエリと 問い合わせ文が似た意味を持つ FAQ には、ユーザーが必要としている情報が含まれている可能性が高いであろうという仮定によります。

BM25 による FAQ 検索について

BM25 とは

BM25 (Okapi BM25) は、古くからある情報検索における順位付けの手法です。文書における単語の出現頻度に基づいてスコアリングする手法です。情報検索における研究のベースラインとして用いられることが多く、本記事でも他モデルとの比較を目的としています。

単語 q_1, \ldots, q_n で構成されるクエリ Q が与えられたとき、文書 D の BM25 スコアは次の式で与えられます。

\operatorname{score}(D, Q) = \sum_{i=1}^n{\operatorname{IDF}(q_i) \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot \left(1 - b + b \cdot \frac{|D|}{\mathrm{avgdl}}\right)}}

ここで |D| は文書 D の単語数、\mathrm{avgdl} は文書集合の平均単語数、f(q_i, D) は文書 D における単語 q_i の出現頻度です。k_1 および b はパラメーターです。k_1 \in {1.2, 2.0}b = 0.75 とすることが多いです。

BM25 スコア式の分母の |D| / \mathrm{avgdl} は、不要な情報が多くを占める長い文書に罰則を与えるためのものです。

\operatorname{IDF}(q_i) は逆文書頻度 (Inverse Document Frequency) と呼ばれるものです。多くの文書に出現する単語であるほどIDFは小さくなり、逆に文書にあまり出現しない単語であるほど大きくなります。

\operatorname{IDF}(q_i) = \ln{\left(\frac{N - f(q_i) + 0.5}{f(q_i) + 0.5}\right)}

N は全文書数、f(q_i) は単語 q_i を含む文書の数になります。

おおざっぱにまとめると、クエリに含まれる単語の出現頻度が高い文書であればあるほど、レアな単語であればあるほど、文書長が短ければ短いほどスコアが高くなる傾向になります。

LASER による FAQ 検索について

LASER とは

LASER とは、Facebook が公開している多言語文埋め込み (multilingual sentence embedding) 訓練済みモデルです。

文埋め込みとは、文をベクトル空間の中に配置することです。

このモデルを用いると、例えば、「病院はどこですか?」と「Where’s a hospital?」のような意味合いが似ている文をベクトル空間上で近い距離にマッピングすることができます。日本語と英語のような異なる言語の文であったとしても類似度を計算することができます。

LASER概要図

アーキテクチャ

LASER はゼロショット翻訳 (zero-shot translation) で訓練された双方向 LSTM ベースのエンコーダです。翻訳モデルの訓練によって得られた文埋め込み (sentence embedding) の情報を様々なタスクに転用します。

LASER ([Artetxe et al., 2019] Figure 1 より引用)
ゼロショット翻訳とは、モデルが直接訓練されていない言語間での翻訳を行うことです。例えば、日本語→英語、英語→中国語の翻訳を行うためのデータがあるときに、英語を挟んで日本語→中国語の翻訳を行うことを指します。

LASER は、英語との対訳データがある 93 言語を使って訓練されており、日本語のデータは 320 万文が用いられました。

なお、訓練済みモデルは GitHub 上で公開されていますが、訓練のためのコマンドは非公開なので、 新たなデータで訓練することはできません。

FAQ 検索への応用

LASER によりクエリと問い合わせ文の文埋め込みを計算し、それらのコサイン類似度を適合の度合いのスコアとします。

BERT による FAQ 検索について

BERT とは

BERT (Bidirectional Encoder Representations from Transformers) とは、2018 年に Google が公開した訓練済みニューラル言語モデルです。この事前訓練済み (pre-trained) のモデルに最終出力層を 1 層追加し、再学習 (fine tuning) することで様々な言語タスクに応用することができます。応用できる言語タスクには、質問応答、機械翻訳、構文解析、固有表現抽出などがあり、これらすべてのタスクで優れた成績をおさめています。

BERT のモデルは、トランスフォーマーエンコーダーを積み重ねた構造をしており、数億にもおよぶパラメーターを持ちます。トランスフォーマーエンコーダーは、文を構成するすべての単語の間の関係を見るため、単語の出現する文脈を考慮した埋め込みベクトルを作ることができます。

事前学習には、Wikipedia と BooksCorpus にある大量のテキストデータを用い、MLM (Masked language modeling) と NSP (Next sentence prediction) と呼ばれる 2 つのタスクを使って学習します。MLM は文中の一部の単語をマスクし、マスクされていない残りの文を見て、マスクされた単語を予測するタスクです。NSP は 2 つの文を入力し、それらが実際に隣り合う文であるかどうかを予測するタスクです。

トランスフォーマーを用いた大容量のモデルと事前学習を組み合わせることで、周囲の文脈を考慮した言語モデルを訓練することができ、再学習と組み合わせることで、現実的な計算資源と時間の中で、パワフルなモデルを得ることができるのが BERT の特徴といえそうです。

近年では、情報検索の分野でも BERT を応用したものが数多く出現しています。例えば、MS MARCO のリーダーボードでも BERT を使ったモデルが多くを占めています。

FAQ 検索への応用

検索システムの仕事は、入力クエリと FAQ の適合の度合いであるスコアを推定することでした。ここでは、このスコアの推定を BERT で行う方法について述べたいと思います。

BERT の検索システムへの応用は多くの研究がなされていますが、今回は、[Nogueira et al. 2019] の方法に従って、文のペアの分類タスクを応用しました。つまり、BERT をベースにしたクエリと FAQ が適合するかしないかの二値分類を行うネットワークを訓練し、このネットワークの出力である適合確率を FAQ 検索でのスコアとして採用します。

ネットワークの構成は、BERT のトランスフォーマーの最終層に全結合層 (Fully Connected layer) を追加し、softmax を出力層に用いたものになります。

ネットワークへの入力は、[CLS] トークン、クエリ、セパレータトークン、FAQ の問い合わせ文の順で結合し、最大 128 トークンに切り詰めたものです。

事前学習済みのモデルとして、東北大の乾・鈴木研究室が日本語データで事前訓練を行った BERT (bert-base-japanese-whole-word-masking) を用い、交差エントロピー誤差を使って再学習 (fine-tuning) しました。

実装には、HuggingFace の Transformers と PyTorch を使いました。

Sentence-BERT による FAQ 検索について

Sentence-BERT (SBERT) とは

上記の方法で適合度のスコアを計算するためには、ネットワークにクエリと FAQ の問い合わせ文のペアを同時に入力する必要があります。クエリに適合する順に FAQ の回答文を並べ替えるには、FAQ の数だけのペアをネットワークに入力する必要があります。BERT が巨大なモデルであることを考えると、非常に大きな計算量が必要であることが分かるかと思います。

Sentence-BERT (SBERT) [Reimers et al., 2019] は BERT を用いた文埋め込みを計算するためのモデルです。ソースコードが GitHub 上で公開されています。

前述の BERT の方法とは異なり、FAQ の問い合わせ文の文埋め込みを事前に計算しておくことができるため、高速な検索システムが実現できます。

SBERT ではディープメトリックラーニングの一手法である Siamese Network を用いることで、意味的に類似した文をベクトル空間の中の近い位置に配置するように訓練します。

アーキテクチャ

SBERT では、BERT の出力層にプーリング操作を行う層を追加します。

BERT の出力は、可変個の埋め込みベクトルの列です。各ベクトルは、文を構成する各トークンに対応します。プーリング操作は、可変個のベクトル列を 1 つの固定長次元のベクトルに変換する操作です。

SBERT には、3 種類のプーリング操作が実装されています。CSL トークンに対応するベクトル出力するもの (CLS-strategy)、各ベクトルの平均をとるもの (MEAN-strategy)、各ベクトル要素の最大値をとるもの (MAX-strategy) です。今回の実験では、デフォルトのプーリング操作である MEAN-strategy を使いました。

訓練には、以下の図のように、プーリング層の後に全結合層と softmax を追加し、自然言語推論 (Natural Language Inference, NLI) のデータセットで分類問題を学習します。NLI は、二文を入力値として与え、含意・矛盾・中立の 3 クラスに分類するタスクです。

Sentence-BERT 概要図 ([Reimers et al., 2019] Figure 1 より引用)
訓練時に文 A と文 B をエンコードする BERT の重みは共有されますが、このように同一のモデルの重みを共有するのが Siamese Network の特徴になります。

FAQ 検索への応用

訓練時には、文 A として、チャットボットへの入力となるユーザーのクエリ、文 B として、FAQ の問い合わせ文を用いました。また、NLI のフォーマットに合わせるために、正解ペアには含意、それ以外のペアには矛盾のラベルを付与しました。

推論時には、クエリと FAQ の問い合わせ文の文埋め込みをそれぞれ SBERT で求め、それらのコサイン類似度を適合度のスコアとして採用します。

訓練の初期値には東北大の乾・鈴木研究室が日本語データで事前訓練を行った BERT (bert-base-japanese-whole-word-masking) を用いました。

実験

データセット

FAQ 検索システムを評価するためには、FAQ データセットとクエリの集合および、それぞれのクエリと FAQ が適合するか否かをひも付けるラベルが必要になります。あるクエリと FAQ が適合する場合を正例とよび、そうでない場合を負例とよびます。

今回は、スグレスを利用していただいているお客様に承諾をいただき、実際に使われている FAQ データセットを利用させていただきました。このデータセットは、1,614 件の FAQ と 46,391 件のクエリからなります。クエリは FAQ の問い合わせ文をさまざまな形で言い換えることで作成したものです。言い換えの元となった FAQ がクエリに対する正例となります。

モデルの学習のためにデータセットを、訓練セット、検証セットおよびテストセットに分割しました。それぞれ正例が 35,000 件、10,000 件および 5,000 件になります。BERT および SBERT の再学習においては、どの程度の量の正例が必要かを判断するために 5,000 件 の正例からなる訓練セットも利用しました。

実験手順

BM25

実装には、オープンソースの検索エンジンある Elasticsearch を用いました。形態素解析には、MeCab の Java への移植版である kuromoji を NEologd 辞書で拡張した mecab-ipadic-NEologd を使いました。

BM25 スコアのパラメーターは k_1=1.2、および b=0.75 を設定しました。

FAQ の応答文は無視して、クエリと FAQ 問い合わせ文のみから BM25 スコアを算出し、上位 100 件抽出します。

前処理として、クエリと問い合わせ文は、Unicode 正規化 (NFKC CF) と踊り字の正規化をした後でトークンに分割しました。さらに、それぞれのトークンは正規化 (動詞・形容詞の原型化、カタカナの末尾の部分の長音除去等) し、検索には重要でない「が」「を」「に」「の」「と」などの助詞を取り除きました。

LASER

モデル訓練の実装が公開されていないため、公式で配布されているモデルを用いました。また、調整可能なパラメーターもなかったためチューニングも不要でした。

配布されているスクリプトを使って、クエリと FAQ の問い合わせ文の埋め込みベクトルを求め、コサイン類似度を計算し、上位 100 件を出力しました。

BERT

学習に用いるデータ件数によるモデルの性能差を見るために、正例が 5,000 件と 35,000 件の 2 つの訓練セットを用いて実験を行いました。

再学習に用いるデータは、クエリ、FAQ の問い合わせ文およびラベルの3つの組になります。ラベルは、正例と負例の二値になります。今回は、負例の組は正例以外の FAQ を K 件をランダムに抽出することで作成しました。ラベルの分布に偏りが生じることを避けるために、正例は K 個のコピーを作ることで、正例と負例のサンプル数の比率が同じになるようにしました。検証セットでの実験によって K=100 としました。

バッチサイズは 128、オプティマイザは Adam、L2 weight decay は 0.01、初期学習率は 3𝑒-6 としました。ウォームアップステップ数は、正例 5,000 件の訓練セットを用いる場合は 1,000 ステップ、正例 35,000 件の訓練セットを用いる場合は、2,000 ステップとしました。

検証セットで確認したところ、1 エポック以上回しても、MAP (Mean Average Precision) がほとんど上昇しなくなったため、1 エポックで打ち切りました。

SBERT

今回は SBERT の訓練を二段階に分けて実施しました。BERT の場合と同じように正例が 5,000 件と 35,000 件の 2 つの訓練セットを用いて実験を行いました。

第一段階においては、SBERT が基礎的な学習を行うことを目的としました。訓練データは BERT の実験で用いたものと同じものです。第二段階では、SBERT に難易度の高い問題を与えることにより能力の向上を図りました。負例をランダムに抽出するのではなく、BM25 と LASER で推論した結果のうち誤っていたものから抽出しました。あるクエリに対する負例の件数 K は、正例が 5,000 件の訓練セットの場合は K=40、正例が 35,000 件の訓練セットの場合は K=20 としました。後者の値が小さいのは、訓練に数日を要すことが分かり、訓練時間を短縮するためにデータ件数とエポック数を減らしたためです。第二段階では第一段階よりもデータ数が減るため、パラメーターの更新回数を維持するためにバッチサイズを小さくしました。

定量評価

ランキング指標

テストセット 5,000 件を使い、各クエリに対する上位 100 件の FAQ を出力し、各モデルの各種ランク指標を計測しました。結果を以下に示します。

モデルP@1P@10P@20P@100MAP
BM250.28670.05990.03410.00850.3765
LASER0.17990.04140.02510.00720.2500
BERT 50000.38830.07870.04280.00970.501
BERT 350000.40820.08150.04450.00990.5257
SBERT 5,0000.23960.06170.03630.00910.3485
SBERT 35,0000.27220.06590.03810.00930.3809
ここで、P@k は推論結果の上位 k 件のうち正解であるものの割合です。

LASER は、すべての指標で最も低い結果となりました。

BERT が今回試したモデルの中においては、各種指標で優れた結果を残しました。学習件数が少ない場合においても、他のモデルを大幅に上回っていることが確認できます。

SBERT の場合、P@1 においては学習セットの件数によらず BM25 に及ばないようですが、P@10、P@20、P@100 においては BM25 に比べて改善しています。このことから、上位をピンポイントで推論する能力は低いが、ランク学習アルゴリズムと組み合せて、検索システムの前段としてフィルタとして用いることで、高性能な検索システムを構築できることが期待できます。

訓練時間

NVIDIA Tesla V100 (1台) で、訓練に要した時間を示します。

モデル正例数、負例数バッチサイズエポック数時間
BERT 5000それぞれ100件12814時間33分
BERT 35000それぞれ100件128115時間24分
SBERT 5000 (第1段階)それぞれ100件80511時間36分
SBERT 5000 (第2段階)それぞれ40件16510時間1分
SBERT 35000 (第1段階)それぞれ100件80190時間54分
SBERT 35000( 第2段階)それぞれ20件1616時間42分

推論時間

NVIDIA Tesla V100 (1 台) で計算したときの推論にかかる時間を測定しました。1 クエリあたり、BERT の場合でおよそ 4 秒、SBERT の場合で 0.012 秒でした。

定性評価

SBERT と BM25 の有利・不利の傾向を把握するために、テストセットからおよそ 100 クエリを抽出し、人手で評価を行いました。

結論としては、SBERT を用いることでユーザーが訊ねたい内容の本質を捉え、適切な回答に辿り着く能力が向上したと言えますが、特徴的な名詞等を含むクエリに対しては BM25 を用いる方が良くなる傾向にあることが分かりました。

以下は、BM25 では捉えられなかったが、SBERT が言い替えをうまく捉えることができたクエリの一例です。「お手入れ方法を教えて下さい。」という文字列を「洗いたい」や「清掃したい」という文字列に近い意味合いだと見なしています。

クエリFAQ の問い合わせ文
食器洗い乾燥機を洗いたい食器洗い乾燥機のお手入れ方法を教えてください。
食器洗い乾燥機を清掃したい食器洗い乾燥機のお手入れ方法を教えてください。
食器洗い乾燥機をきれいにしたい食器洗い乾燥機のお手入れ方法を教えてください。
以下は、BM25 でのみ正解を抽出できたケースです。低頻度語である「メッキ」を含んでいることが正解を抽出できた要因であると考えられます。

クエリFAQ の問い合わせ文
メッキのついた食器は洗えますか金・銀メッキを施した食器は、なぜ洗えないのですか。(ビルトイン食器洗い乾燥機に関して)
機械にメッキされた食器は入れられますか金・銀メッキを施した食器は、なぜ洗えないのですか。(ビルトイン食器洗い乾燥機に関して)
SBERT が文埋め込みを用いていること、BM25 が単語の重なりを見ていることを踏まえれば、人手による定性的評価は妥当な結果でしょう。

まとめ

本記事では、BM25、LASER、BERT、SBERT を用いて FAQ 検索を実現し、それぞれのモデルの実験結果を紹介しました。

BM25 は、一位を推定する能力では BERT に次ぐ結果となりました。定性評価では特徴的な単語を含むクエリでは正解を捉える能力が高いが、言い換え文を捉える能力に課題があることを見ました。このことは単語の一致数を見ていることに起因するものでした。この課題に対するアプローチとして類義語辞書を作成する方法があります。辞書を運用していくコストの問題、活用形のある形容詞と動詞の取り扱いが難しいなどの問題などがありますが、これらを解消・改善することで、運用負荷を下げ、かつさらなる精度の向上が期待できます。

LASER は、モデルが公開されているので簡単に実験ができるという利点がありましたが、それは再学習できないといった欠点でもあり、今回試した中では最も精度が低い結果となりました。また、記事中で紹介できませんでしたが、語尾によって結果が微妙に変わってしまい、それによって精度を下げていることが明らかになりました。LASER のエンコーダは双方向 LSTM によって構成されているため、クエリの最初の単語と最後の単語の影響力が大きすぎる可能性があります。

ランキング指標における性能では期待通り BERT が最も良い結果を示しました。しかし、小規模な FAQ でない限り、推論にかかる時間の問題から、リアルタイムアプリケーションでの利用は難しいということも見ることができました。

一方で、SBERT での FAQ 検索は、一位を正解する能力は低いが、上位数 10〜100 件でみると、単語でのマッチングによる BM25 よりも優れていることを見ました。また、非常に短い時間で推論することもできます。SBERT でまず検索を行い、そのフィルタリング結果を、BERT やランク学習のような別のモデルで並べかえることで、リアルタイム性の高い、高性能なシステムを実現できる可能性があります。

BERT においては、精度を維持したまま、モデルサイズを小さくする試みがいくつか提案されているようです。例えば、知識蒸留 (knowledge-distillation) を用いたモデルの圧縮や、あるいはトランスフォーマーの層をいくつかドロップするなどの手法が紹介されています。今後は、こういった手法を用いて、精度を犠牲にせずに、スピードアップを追求するというのもやってみられたらいいなあと思っています。

ALBERTというと機械学習・データ分析のイメージが強いかと思いますが、優れたAIシステムを構築する為には、ユーザビリティ、保守性、セキュリティなどの、ソフトウェアの品質も非常に重要な要素であり、ソフトウェアエンジニアも多く活躍しています。 これまでのご経験を活かしながら、AIを活用したシステム開発・プロダクト開発に関わりたいソフトウェアエンジニアの方にもぴったりな職場だと思いますので、是非ご応募いただきたいです。(募集要項はこちらからご覧ください。)

参考文献

  • Robertson, S. (2010). The Probabilistic Relevance Framework: BM25 and Beyond. In Foundations and Trends® in Information Retrieval (Vol. 3).
  • Artetxe, M., & Schwenk, H. (2019). Massively Multilingual Sentence Embeddings for Zero-Shot Cross-Lingual Transfer and Beyond. Transactions of the Association for Computational Linguistics, 7, 597–610.
  • Devlin, J., Chang, M.-W., Lee, K., & Toutanova, K. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.
  • Nogueira, R., & Cho, K. (2019). Passage Re-ranking with BERT.
  • Reimers, N., & Gurevych, I. (2019). Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks.

チャットボットは個性を獲得できるのか?

$
0
0

はじめに

こんにちは。プロダクト開発部の飯田です。

2020年に新卒として入社し、AIチャットボット「スグレス」をはじめとした、自然言語処理の研究開発に取り組む予定です。

スグレスはユーザーの要望に的確に回答できるチャットボットで、対話の内容はクライアント毎に調整します。

たとえば弊社のコーポレートサイトに設置されたスグレスでは、電話番号や所在地といった会社概要のほか、採用情報や事業内容に至るまで、弊社に関連する事項を幅広く回答します。

おすすめは弊社の扱う技術要素について尋ねることです。ディープラーニングやクラスター分析など、名前はよく聞くけれども複雑で難しい……という様々な手法について、大変わかりやすく教えてもらえるので、私も頻繁にスグレスの力を借りています。

そんなスグレスですが、その口調は一貫して事務的で丁寧です。現在は質問に対する回答を返すことを目的としたシステムなので問題はありませんが、より汎用的なAIチャットボットとしての進化を考えると、TPOに応じて口調を変えられると夢が広がるでしょう。

個人的に欲しいのは、メールやSNSの返事を代筆してくれる機能です。人間関係の距離感は難しいので、どれだけ丁寧にするか、くだけた口調にするか、私はよく迷うのですが、そうした判断をスグレスに助けてもらえれば心にゆとりが生まれます。

そこでチャットボットに個性を与える研究が実現できないか?と考え、まずは世界の最先端がどこにあるのかとサーベイを行いました。本記事ではその調査結果についてまとめます。

チャットボットの概要

アカデミックな世界では、研究問題の細分類として「タスク」という概念を用います。チャットボットというシステムを実現するためのタスクは、以下のように分類されます。

表1.チャットボット関連タスク一覧

タスク 概要
Information Retrieval 情報を収集しランク付けをする、広い意味での情報検索タスクを指す
Style Transfer 独白・対話、書き言葉・話し言葉等によらず一般的な文体変換タスクを指す
Machine Comprehension 応答文を情報源の中から抽出する質問応答システムなどに用いられる
Question Answering 応答文をテンプレートの中から選ぶタイプの業務用チャットボットに用いられる
Next Utterance Prediction 対話の次の文を予測する
Personalized Dialogue PERSONA-CHAT[11]以後に現れたNext Utterance Predictionの細分類 個性をエージェントに与えたときに次の文を予測する

本記事で扱う「チャットボットに個性を与える研究」は、上記の分類のPersonalized Dialogue に該当します。

Personalized Dialogueでは対話の次の文を予測することが目的となる訳ですが、一般的なチャットボットによる質問応答の流れでは、「分類」「生成」の2パターンで応答文を予測します。

図1.分類型チャットボットの流れ
分類型では、応答文のテンプレートを事前に作成しておき、応答文集合の中から適切なものを選択します。応答文の品質を制御しやすい方式です。

chatbot_generation-2.png
図2.生成型チャットボットの流れ
一方生成型では、応答文を一単語ずつ生成してゆき、最終的に得られた単語列を出力します。品質を安定化させることは難しいですが、微妙な個性を反映させやすいです。

それでは、チャットボットのイメージと、Personalized Dialogueの位置付けについて掴んでいただいたところで、Personalized Dialogueのサーベイ結果の報告へと移りたいと思います。

サーベイ:Personalized Dialogue

Personalized Dialogueの現状と概要

図3.Personalized Dialogueの歴史
ペルソナと呼ばれる個性を持つ対話に特化しているPersonalized Dialogueですが、その歴史はニューラル言語モデルの中でも比較的新しい方に属します。

ベースラインを用意したという意味で、Personalized Dialogueの起源は2018年のPERSONA-CHATにあると言えるでしょう。PERSONA-CHATの功績は、データセットを「プロフィール」「対話」の二種類に分け、さらにそのデータセットを公開したことです。これにより、プロフィールを参照しながら次の対話文を予測する、という形式が後発のPersonalized Dialogueにおける主流となりました。

Personalized Dialogueでは、PERSONA-CHATから始まった研究が次の代、また次の代へと引き継がれていきました。たとえば、FT-PCではスクレイピングで得た多様なプロフィールを活用し、さらにPAMLでは膨大なプロフィールの中から的確なものを参照するような手法が提案されました。

さて、ベースラインとなるモデルとデータセットが揃い、Personalized Dialogueは研究を始めるには十分な水準に達しました。日本語チャットボットサービスとして実現可能なレベルには届いているのでしょうか。

データセット

前述の通り、Personalized Dialogueに用いられるデータセットは、プロフィールと対話の二種類の要素により構成されています。ここではPERSONA-CHATの手順を取り上げ、まずはプロフィールについて説明しましょう。

図4.PERSONA-CHAT データセットの例
プロフィールはクラウドワーカーにより作成された、キャラクターを表す5文です。各文は15単語以内の短文であり、会話の種になるようなトピックを含んだ、自然な文から構成されています。また、似たような文や単語ばかりとならないように一部の文を書き換えています。

次に、プロフィールをもとに対話データを作成します。二人のクラウドワーカーを選出し、ランダムにプロフィールを割り当てたあと、プロフィールが反映するペルソナを演じながら対話を行います。対話文は互いを知ろうとするような内容の自然な対話であり、交互に一文ずつのやり取りを数回程度実施したものを1対話データとして扱います。また、各文は15単語以下の短文で構成され、さらに似たような対話ばかりとならないよう、パターンマッチを使い検査を行います。

表2.Personalized Dialogueのデータセット

データセット データ数 言語 特徴
PERSONA-CHAT[11] 1,155ペルソナ
約15万文
英語 クラウドワーカーより作成
質量ともに安定
REDDIT[6] 約500万文 英語 掲示板をスクレイピング
非公開
雑談対話コーパス[12] 116ユーザー
1,146対話
日本語 破綻した雑談対話を類型化

このようにPERSONA-CHATでは、Personalized Dialogueに適したデータセットとなるよう、様々な工夫が取り入れられました。品質と規模において、これほどのデータセットを集めることは難しく、特に日本語となるとより厳しい状況です。

しかし、オンライン掲示板REDDITのログからPERSONA-CHAT形式のデータセットを作成する手法[6]が提案され、一定の成果を挙げました。これにより、日本語Personalized Dialogueデータセットを構築できる可能性があります。

モデル

ニューラル言語モデルを用いたチャットボットでは、Seq2Seq[4, 9]以来、様々な手法が提案されました。基本的な構造は、直前の会話文を入力して応答文を出力する、というものです。

Personalized Dialogueにおいては、さらにペルソナが加わります。下の図は実際のモデル出力結果を翻訳した例ですが、ペルソナを参照しながら入力文から応答文を予測する流れを示しています。

図5.Personalized Dialogueの実際の出力例
このとき、ペルソナを用いない通常のチャットボットの場合には、一般的によくありそうな答えを予測します。学習に使われた対話データの中で頻繁に出現する内容が選ばれやすい傾向にあります。

よって、通常のチャットボットで応答文に個性を持たせようとするには、そうした対話ばかりを集めたデータセットによる学習が必要です。しかしこの方法では、状況に応じて個性を切り替えることが出来ません。

一方Personalized Dialogueでは、ペルソナを学習することで、個性を自由に切り替えられることが特徴です。PERSONA-CHATでは1,155種類のペルソナがクラウドワーカーにより作成され、さらにREDDITデータセットでは500万種類のペルソナをスクレイピングとルールベースのプログラムにより収集しました。

さらにFC-PT[6]では、PERSONA-CHATデータセットを用いた事前訓練済みモデルをもとに、REDDITデータセットによるfine-tuningを実施したところ、hits@1スコアで18.6%もの改善が示されました。

しかしFT-PCのようなペルソナの種類を増やすアプローチでは、ペルソナの一貫性が低下するといった問題が指摘されています。多重人格のように振る舞う、ということです。こうした問題に対処するため、事前学習済みモデルにBERT[1]を利用し、メタ学習を取り入れたPAML[5]が提案されました。

このように、Personalized Dialogueのモデルに関する研究では、タスク特有の問題に対する改善策が提案されては新たな問題が生じ、それをさらに後発の論文が改善していく、という発展的な段階にあると言えます。

表3.Personalized Dialogueのモデル

モデル 概要 NNの構造 出力 ペルソナ使用方法
文連結型Seq2Seq[11] ペルソナと入力文を連結しエンコード RNN 生成 文連結
Generative Profile Memory Network[11] メモリにペルソナを保存し生成 RNN 生成 メモリに保存
Ranking Profile Memory Network[11] ペルソナと入力文の類似度に対して近い応答文を検索 RNN 分類 入力文との類似度
KV Profile Memory Network[11] メモリにペルソナを保存し分類 RNN 分類 メモリに保存
FT-PC[6] PERSONA-CHATで訓練後、REDDITでfine-tuning RNN,
self-attention
分類 マルチエンコーダ
PAML[5] BERTをメタ学習によりfine-tuning self-attention 分類 メタ学習
DIM[2] 文脈を扱う RNN 分類 マルチエンコーダ
今回、調べたモデルを上の表にまとめました。1行目から4行目がPERSONA-CHATで試されたモデルで、5行目以降が後発のモデルです。

いずれもTransformer[10]以後のモデルですが、RNNベースのモデルが見受けられます。これはPersonalized Dialogueにおいては、入力文のほかにペルソナを扱う必要があり、追加の情報を処理できるMemory Network[7, 8]やマルチエンコーダが使用されるためです。

Transformerでは学習時の不安定さが指摘されており、複雑な機構を持つこれらのモデルに応用することが難しく、まだ、ある程度はRNNの安定感が好まれている模様です。

しかしSeq2Seqを生んだ機械翻訳の分野では、RNNベースのSeq2SeqよりもTransformerの方が高速に学習可能であることや、言語モデルの表現力が高いことが知られています。これはRNNでは入力文を一単語ずつ順番に処理するため、並列化が難しいことと、未処理の単語の情報を参照できないことが理由です。

Transformerのself-attentionではこうした問題を解決しているため、いまや機械翻訳のみならず、文書要約や情報検索といった様々な分野でTransformerが採用されています。そのため、Personalized Dialogueにおいても今後はTransformerを用いるモデルが主流になるのではないかと予想されます。

Personalized Dialogueはまだ発展の途上にあります。しかし、一定の成果を挙げたモデルは既に存在していることが明らかとなりました。ひとまずはデータセットを集めて、実際に学習してみることになるでしょう。

実現可能性の検討

データセットについては、REDDITデータを作成した手法[6]で自作することが検討されます。アクセス可能で話者(ペルソナ)を特定できる日本語対話データというと、Twitterのツイートなどが考えられます。これらからPersonalized Dialogue用のデータを抽出した際に、どれほどの規模のデータセットとなるかで研究の成否は左右されると予想します。

なお、Twitterの月間ツイート数などを見るに、PERSONA-CHAT以上の規模を収集することは、十分に可能と考えられます。ツイートの利用については、Personalized Dialogueの先行研究[3]でも実際に採用された手法であり、それを元にPERSONA-CHATのフォーマットに落とし込んでいく形になりそうです。

表4.データソースの候補

概要 話者特定可否 文脈有無 対話文の有無 収集方法 データの規模(抽出前)
Twitter SNSのツイート API 150万件 / 30日間
TED talk TEDの講演ログ モノローグのみ データセットとして公開 約20万文
OpenSubtitles2018 映画字幕データ 一部可 一部あり データセットとして公開 約200万文

モデルについては、PERSONA-CHATで用いられた文連結型Seq2Seqが最もシンプルで、Transformerへの転用も容易なため、叩き台に最適です。また、精度や学習時間を考えるなら、BERTを用いたfine-tuningを行うPAMLを利用したいところです。スクラッチで組むならばFC-PTでしょうか。モデル側では、既存の研究がある程度の成果を出しているので、それを参考にすれば問題なさそうです。

結論として、現段階ではまだ不確定要素が多いものの、実現可能性は十分にあると言えるでしょう。

おわりに

本記事では、チャットボットに個性を持たせるというモチベーションから、研究としての位置づけや、現在の主だった状況を調査しました。

その結果、本件はPersonalized Dialogueタスクに該当すること、データセット構築に関する先行研究があること、ニューラルネットワークを用いた対話モデルが実装されたことが明らかとなり、日本語の対話モデルにおいても実現の見込みがあると判断しました。

また、ALBERTでは最先端の人工知能開発も請け負っているため、プロジェクト開始時にこのような技術調査から入り、さらにプロトタイプを実装・評価し、ソリューション導入によるビジネス価値を分析した上で投資判断を仰ぐ、というようなことも多く行っています。

ALBERTではそのような業務を想定した新卒研修を行っており、今回の記事は研修の一環として行われた、技術調査課題の成果物がもとになっています。技術調査課題では、クライアントからの技術調査依頼に対する調査報告書の作成方法を学びました。

課題はテーマが複数あり、各自好きな課題を選んで調査を行いました。これからこの記事以外にも、技術調査課題について5つの記事がブログ化される予定ですのでご期待ください。

最後に、ALBERTではともに最先端の課題に挑戦するメンバーを募集しています。

興味をお持ちいただいた方は、こちらまでお問い合わせください。

参考文献

  1. J. Devlin, M. W. Chang, K. Lee, and K. Toutanova. 2019. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. In Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, pages 4171-4186.
  2. J. C. Gu, Z. H. Ling, X. Zhu and Q. Liu. 2019. Dually Interactive Matching Network for Personalized Response Selection in Retrieval-Based Chatbots. In Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing (EMNLP-IJCNLP), pages 1845-1854.
  3. J. Li, M. Galley, C. Brockett, G. P. Spithourakis, J. Gao, and B. Dolan. 2016. A Persona-Based Neural Conversation Model. In Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics, pages 994-1003.
  4. M. T. Luong, H. Pham, and C. D. Manning. 2015. Effective Approaches to Attention-based Neural Machine Translation. In Proceedings of the 2015 Conference on Empirical Methods in Natural Language Processing, pages 1412-1421.
  5. A. Madotto, Z. Lin, C. S. Wu, and P. Fung. 2019. Personalizing Dialogue Agents via Meta-Learning. In Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics, pages 5454-5459.
  6. P. E. Mazare, S. Humeau, M. Raison and A. Bordes. 2018. Training Millions of Personalized Dialogue Agents. In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing, pages 2775-2779.
  7. A. Miller, A. Fisch, J. Dodge, A. H. Karimi, A. Bordes, and J. Weston. 2016. Key-Value Memory Networks for Directly Reading Documents. In Proceedings of the 2016 Conference on Empirical Methods in Natural Language Processing, pages 1400-1409.
  8. S. Sukhbaatar, A. Szlam, J. Weston, and R Fergus. 2015. End-To-End Memory Networks. In Proceedings of the 28th Annual Conference on Neural Information Processing Systems (NIPS 2015), pages 2440-2448.
  9. I. Sutskever, O. Vinyals, and Q. V. Le. 2014. Sequence to Sequence Learning with Neural Networks. In Advances in Neural Information Processing Systems, pages 3104-3112.
  10. A. Vaswani, N. Shazeer, N. Parmer, J. Uszkoreit, L. Jones, A. N. Gomez, L. Kaiser, and I. Polosukhin. 2017. Attention Is All You Need. In Advances in Neural Information Processing Systems, pages 6000-6010.
  11. S. Zhang, E. Dinan, J. Urbanek, A. Szlam, D. Kiela, and J. Weston. 2018. Personalizing Dialogue: I have a dog, do you have pets too?. In Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics, pages 2204-2213.
  12. 東中 竜一郎, 船越 孝太郎. 2014. Project Next NLP対話タスクにおける雑談対話データの収集と対話破綻アノテーション. 人工知能学会, pages 45-50.

[2020新卒入社]株式会社ALBERTに入社しました

$
0
0
こんにちは!
2020年4月に新卒として入社した小林です。

今年は新型コロナウイルスの影響で入社式が無くなり、研修はほとんどオンラインでの研修となり、新入社員、そして研修を用意する講師陣にとって怒涛の2ヶ月間でした。

また、 2020年の新入社員は計29名が入社し、例年に比べ大人数であったため研修準備も二重、三重に大変だったのではと思います。
2020/04/01 松本社長のメッセージを新入社員29名で視聴しています
松本社長の新入社員へのメッセージを視聴した4月1日を境に、研修がオンラインに移行しました。新入社員全員分のポケットWi-Fiを用意済みであるなど、オンラインへの対応の速さに驚いた記憶があります。

オンライン研修が決まった当時は、大学生気分である自分をオフィスで鍛え上げて欲しかったので、複雑な心境でした(もちろん、素晴らしい判断だと思います)。

しかし、その不安も忘れるような密度の濃い研修を受けることができました。

これから、今年行ったオンライン研修についてご紹介します。
ALBERTに興味がある方、あるいはオンライン研修について気になる方はぜひ読んでいただけると幸いです。

自己紹介

大学院時代は主にクラスタリングについて研究しており、M1ではクラスタリングの妥当性基準について、M2からはテーマが変わりガウス過程を用いた研究をしていました。

インターンで深層学習や強化学習を実装することはありましたが、どちらかといえば理論寄りの研究室で、あまりPythonや、Rが書けるというわけではありませんでした。Kaggleなどのコンペも参加したことはなく、今回の研修で初めて大規模データを扱ったというわけです。

私のように大規模データを扱ったことがなくても、研修でSQLの基礎から機械学習モデルの動かし方までしっかり教えていただいたので、あまり詰まらず研修についていくことができました。

研修内容

研修は座学、ハンズオン形式の前半フェーズ、実案件形式の後半フェーズに分かれています。具体的な内容を下の表にまとめました。
2020年度の新卒研修内容
簡単な機械学習モデルから、深層学習モデルまで様々な手法を扱う研修となっており、実案件形式では各々が考えたモデルでデータ分析の成果報告を行いました。
また、クライアント対応演習を除く全ての研修はオンライン上で行いました。

オンライン研修では、Web会議アプリケーションを用いて、資料や実際のコードを共有しながら研修を進めました。また、Slack上に演習ごとの専用チャンネルが設けられており、わからないことがあればすぐに書き込んで聞ける環境が整備されていました。こうしたテキスト形式のコミュニケーションをうまく利用することで、オンライン研修をスムーズに行えていたと思います。
小林(筆者)の在宅デスクの様子 モニターがあって助かりました
研修の前半フェーズである座学、ハンズオンに関しては2018年の新卒研修記事に詳しく、後半フェーズである実案件形式の分析演習に関しては2019年の新卒研修記事に詳しく書かれております。
ぜひこちらもご一読ください。

今回の記事では、2020年度より導入された、実案件形式のクライアント対応演習について詳しく書きます。

クライアント対応演習

2020年度より導入されたクライアント対応演習は、実際のデータ分析ビジネスを踏襲し、先輩社員が顧客役となり、商談や報告会をロールプレイ形式で実施しました。

本演習は新入社員メンバー4,5名でのグループ演習だったのですが、
演習期間が4日間と非常にタイトなスケジュールかつ、オンライン研修の影響で同期と十分にコミュニケーションを取れていなかったので、本当にアサインされたプロジェクトのような緊張感がありました。 クライアント対応演習では、
  1. 外乱の多いノイジーな環境に慣れる
  2. 明確に課題化されていない問題との向き合い方を学ぶ
  3. クライアント折衝を擬似体験する
ことを目的にしています。

また、クライアント対応演習は提案フェーズと分析フェーズに分かれており、具体的な内容を下の表にまとめました。
クライアント対応演習の内容
では、具体的にそれぞれのフェーズの内容について振り返っていきます。

1-2日目:提案フェーズ

提案フェーズではまず、メーカーからAIシステム導入を検討しているという問い合わせを受けた設定で演習がスタートしました。
ここからプロジェクトを受注するため、ドメインについて調べることや、メーカーに対するヒアリングを通じてクライアントに訴求する提案内容を練り上げていきます。

クライアントが実際に作業のどの過程でAIを導入しようとしているのかや、作業の具体的なコストを知ることができたため、ドメインついて調べ上げることは提案フェーズにおいて非常に役に立ちました。

また、こちらがより具体的にAIシステム導入プロジェクトの全体象を把握し始めると、クライアント側も追加でこういったことをして欲しい、この作業へAIを入れたらどうなるのか、など追加の要望や疑問点が増えていきます。

提案フェーズでは、こうしたクライアントの要望の変更に応じて、提案内容を練り上げていくことを学びました。

3-4日目:分析フェーズ

分析フェーズでは、実際にAIを導入したらどれくらいの効率化が見込めるかを検証する、いわゆるPoC(Proof of Concept)を目的にデータ分析を行いました。

Pythonを用いて受領したデータを確認し、使えそうな特徴量を探しながらモデルを作成していきます。

私のグループでは、解釈性を持たせるために決定木系のモデルを作成しましたが、提案フェーズで提出した提案書の内容と比べてモデルの精度が足りず、このままではクライアントを満足させられないと悩む時間が続きました。
しかしその後、我々の分析の現状を適切にお伝えしながらMTGやメールを重ねることで、クライアントから追加のデータをいただくことができました。
こうして引き出した追加データを用いたモデルは、提案書で想定していた精度よりも高くなり、クライアントに満足していただける結果に繋がりました。

分析フェーズでは、クライアントから受領したデータを確認しながら、限られた時間の中で成果を出していくことの難しさを学びました。

他のグループでもやはり決定木系のモデル(ランダムフォレスト、GBDT等)が多かった印象です。個人的には受領したデータの分布がそれぞれ異なっていたので、ガウス混合分布を用いたモデルを検討すれば面白そうでした。

また、どのグループも総じて発表スキル、分析スキル共に高く、同期の優秀さを感じました。それでいて悪い意味のプライドの高さなどはなく、考え方や技術に対してピュアな印象があります。

クライアント対応演習を通じて学んだことは様々ありますが、印象に残っているのは、AIを用いたプロジェクトには確実性がないため、適切に現状をお伝えしながら、クライアントと足並みを揃えてプロジェクトを進める必要があるということです。
これは、AIを用いる企業である我々にとって全てのプロジェクトに関わってくるので、肝に命じる必要があります。

オンライン研修の感想

やはり、オフラインでのコミュニケーションは必要だと思いました。

オンライン研修中の2ヶ月間、同期全員が孤独な戦いをしていたはずです。
メールやSlack上のやりとりも可能ではありますが、一度も顔を合わせないと距離感、空気感が掴めず難しい印象を受けました。

もし今後オンライン研修を行うことがあるなら、メンターの方から新卒社員をグループ分けして積極的にコミュニケーションを取らせようとするなどの取り組みがあっても良いかもしれません。

研修外のオンラインにおける取り組みについて

ここから研修とは別に、会社内の取り組みで印象に残った、オンラインにおける「勉強会」「案件共有会」、そして「オンライン座談会」についてのご紹介です。 ALBERTでは、論文を紹介したり、実務に使えるTipsを共有したりする「勉強会」、過去行った案件を共有する「案件共有会」というものがあります。
また、時間は大体30分~60分あたりで、参加した時間は業務時間として扱うという嬉しい制度があったりします。

これらのイベントは普段と変わらずオンラインで開催されており、各自視聴しながら作業をするといったことが可能でした。
直近の案件共有会では、厚生労働省のクラスター対策班での取り組みに関する話があり、画面に食らいつきながら見ていた方も多いはずです。

ALBERTのクラスター対策班におけるデータ分析支援については、各メディアから記事が出ているので、こちらもぜひご覧ください。
Forbes Japan:
民間のデータサイエンティストが見た「驚きの内幕」、厚労省のコロナ分析
コロナ後も「絶対にデータ分析はやめてはいけない!」 初動の悔い、第二波の教訓に
また、「オンライン座談会」は6月から始まった新しい取り組みで、在宅勤務下では獲得しづらい、社員同士の縦の繋がり、横の繋がりを作るために開催されました。
社員同士が出入り自由かつコメントも自由となっており、ALBERTの社風がオンライン座談会にも現れていたと思います。

この記事を書いている小林が記念すべき第1回のメンバーに選ばれ、新入社員2名+先輩社員2名の計4名で在宅勤務における工夫や趣味についてのフリートーク、コロナ後がどうなっていくのかなどのテーマで話し合いました。
オンライン座談会を楽しむ社員
ALBERTに入社して驚いたことは、オンラインでもできることや新しい取り組みをスピード感をもってアクションできていることです。今後は自分も一緒に新しい取り組みをどんどんと推し進めていきたいです。

また、実案件においてもオンライン化が進み、重要情報などを扱う際のセキュリティ問題への対策は必要不可欠ですが、プロジェクトを在宅で行うことも可能になってきています。
しかし、個人的には、オフラインにおけるコミュニケーションのためのオフィスは必要だと思います。
今回の新型コロナウイルスの影響によって、改めてオフィスの使い方や在宅における社内制度等を考えるきっかけにもなったのではないでしょうか。

まとめ

今年は新型コロナウイルスの影響でオンライン研修となり、新入社員、そして研修を用意する講師陣にとって怒涛の2ヶ月間でした。

オンライン研修上の課題はありましたが、2ヶ月間様々な演習を行い、データサイエンティストとしての基礎力を身に付けることができました。

また、今後は在宅とオフィスを両方活用していくような新しい時代になっていくと予想されますが、1つ1つのコミュニケーションを大切にすることで、スムーズな人間関係を構築し、業務に取り組んでいきたいです。

最後まで読んでいただきありがとうございました!

ALBERTでは積極的に新卒採用を行っています。
ALBERTに興味のある方、データサイエンティストに興味のある方は気兼ねなくお問い合わせください!

説明可能AIが社会から必要とされる理由、その研究動向・応用事例について

$
0
0

はじめに

こんにちは。2020年4月に新卒として入社した、データソリューション本部の森西です。新卒研修の技術調査課題で調査した結果についてブログを執筆します。 この課題では、設定された10個の技術的テーマからそれぞれ好きなテーマを選択し、4日間かけて調査した結果をまとめました 。私は、10のテーマの中で「Explainable AIに関する技術調査」を選択し、今回はそのまとめた内容について紹介します。

Explainable AIについて

まず初めに、Explainable AIについて説明します。Explainable AIとは、その言葉通り、予測結果や推定結果に至るプロセスが人間によって説明可能になっている機械学習モデル、あるいはそれに関する技術や研究分野のことを指します。(引用元:AI・機械学習の用語辞典 XAI(Explainable:説明可能なAI) /解釈可能性(interpretability)とは?[23])

昨今では、AI(機械学習)の技術発展に伴い、社会実装の期待が高まっています。 一方でそれらの技術に対して不安も増加しています。その背景として、AI(機械学習)の中身の技術が非常に複雑で「ブラックボックス」となっており、AI(機械学習)の予測結果や推定結果に対する説明が十分ではないことが理由として挙げられます。医療分野など、AI(機械学習)の予測結果や推定結果に理由を求める分野も存在し、説明可能なAI(機械学習)を求める社会的機運は高いと考えられます。

本ブログでは、Explainable AIについて社会的に求められるようになった背景、最近の研究動向、応用例、展望について述べていきます。

Explainable AIが必要になった社会背景

ここでは、Explainable AIが社会的に必要になった背景について述べていきます。

図1:現状のAI(機械学習)フロー(引用元:FUJITSU JOURNAL HP[19]より)

図1は現状のAI(機械学習)のフローを表しています。 現状のAI(機械学習)では、学習プロセスが非常に複雑で、高い精度で対象を予測・推定することは可能ですが、なぜそのような結果を出力したかを説明することはできません。根拠を示すことができなければ、 下記の図2のように今現在人間が従事している業務を委ねることができない分野も多く存在します。

図2:現状のAI(機械学習)では業務を委ねられない分野の事例

具体的には図2のように、今現在のAI(機械学習)では、 仮に銀行の貸付の判断をするAI(機械学習)モデルを構築したとしても、何を根拠に判断したか明示することはできません。 病院の場合を考えてみると、仮に健康診断の結果から健康状態を予測できるAI(機械学習)はあったとしても、何を根拠に予測したのか明らかにすることはできません。 現在のAI(機械学習)では、高い予測精度を求めると解釈性が低くなり、解釈性を求めると予測精度が低くなるという、予測精度と解釈性がトレードオフの関係にあり、図2のような高い予測精度と解釈性(根拠)が求められる分野では、AI(機械学習)の社会実装が難しい状況にあります。

Explainable AIは「国家単位の要請」でもあります。2017年に総務省が策定した「AI開発ガイドライン[17]」では、「透明性の原則」、「アカウンタビリティー(説明責任)の原則」が明記されています。また2018年にEUが提示した「General Data Protection Regulation(GDPR)[10]」では、データに基づく意思決定に対して、「ユーザーの権利の保証」、「サービス提供者の介入を保証する責任」が明記されています。この他にも DARPA(アメリカの 国防高等研究計画局 )が、XAI(Explainable Artificial Intelligence)プログラムとして、Explainable AIプログラムを開発する企業や大学に投資を行っています。このように「国家単位の要請」「国家単位で取り組まれている課題」としてExplainable AIが必要とされています。

具体的にExplainable AIが社会実装された場合はAI(機械学習)のフローは下記のようになると考えられます。

図3:AI(機械学習)のフロー変化(引用元:FUJITSU JOURNAL HP[19]より)


図3はExplainable AIの一例ですが、Explainable AIが社会実装されるとAI(機械学習)の予測・推定に至るプロセスが明確になり、人間は根拠を持ってAI(機械学習)の出力を扱うことができます。根拠が明確になれば、現状では、委ねることができない医療分野などでもAI(機械学習)に業務を委ねることができると考えられます。

図4: AI(機械学習)の解釈性と予測精度の展望(引用元:Explainable Artificial Intelligence[8])


図4はAI(機械学習)の解釈性と予測精度の展望を表しています。上記で述べたように、現状のAI(機械学習)モデルでは予測精度が高いものは解釈性が低く、解釈性が高いものは予測精度が低いというトレードオフの関係性を持っています。Explainable AIでは、その予測精度と解釈性の両立を目指し研究が行われています。具体的な研究動向や手法は、次の章で説明します。

Explainable AIの研究動向

ここでは、Explainable AIの研究動向について紹介します。

図5: Explainable AIに関する論文数の推移
(引用元:Adadi and Berrada(2018)[1])

説明可能なAI(機械学習)モデルに対する社会の期待もあり、図5のようにExplainable AIに関する論文は年々増加傾向にあります。2017年には、アメリカの国防研究を行っているDARPAからExplainable AIのアプローチがまとめられるなど国家・研究者単位での注目が集まっています。

ここでは、上記のDARPAの分類をもとに4つの手法について紹介します。DARPAはExplainable AIを大きく「特徴量の可視化」、「解釈可能なモデルを生成」、「解釈可能なモデルで近似」の3つに分類しています。

特徴量の可視化

ここではExplainable AIの3つのアプローチのうち「特徴量の可視化」に分類される「LIME」と「PDP」について紹介します。Explainable AIにおける「特徴量の可視化」では、AI(機械学習)の予測・推定に対して寄与した特徴量の関係性を可視化することを目的とします。

 LIME(Local Interpretable Model-Agnostic Explanation)

図6:LIMEの分析フロー(一部画像はRibeiro et al.(2016)[6]より引用))

LIMEはRibeiro et al.(2016)[6]で考案されたExplainable AIの手法で、1つの予測結果(画像データであれば1枚の画像の予測結果、テーブルデータであれば1レコードの予測結果)に対してのみ局所的に近似させた単純な分類器を使って、そこから予測に寄与した特徴量の可視化をするものです。

局所近似する分類器を求める目的関数

\xi(x) = \argmin L(f, g, \pi_x) + \Omega(g)
g\in G

損失関数L(f, g, \pi_x)

L(f, g, \pi_x) = \sum_{z,z^{\prime}\in Z}\pi_x(x)(f(z)-g(z^{\prime}))^2

Z:データxの周辺のデータの集合
z:データxの周辺からサンプリングしたデータ
テキストデータでは、乱数を発生させ使用データの単語をランダムに消去しサンプリング
*テーブルデータでは、乱数を発生させ使用データの一部を変更しサンプリング
画像データでは、乱数を発生させ、ランダムに使用データに加えてサンプリング
z^{\prime}: 非ゼロ要素を含む2値のスパースな点 、z^{\prime} \in {0,1}^d
z^{\prime} は、サンプリングしたデータzを人間が理解できるように要素の有無をバイナリーで表現したもの。

図7:LIMEの分析フロー(引用元:Local Interpretable Model-Agnostic Explanation: An Introduction[14])

図7のように特定の結果(この場合ではカエルの画像)に対して一部をサンプリングし、学習モデルで予測し、サンプリングデータと学習結果のペアを作成し、局所的なかつ単純な分類器(線形回帰など)で各々を学習します。そして単純な分類器の偏回帰係数から特徴量の寄与度を明らかにし、可視化を行う手法です。構築したAI(機械学習)モデルを利用するため、構築するAI(機械学習モデル)を選ばず、デバックなどに利用することが可能です。

PDP(Partial Dependence Plot)

PDPはFriedman(2001)[5]で紹介された、興味ある変数以外の影響を周辺化して消してしまうことで、特徴量と予測・推定の関係を単純化し可視化する手法です。事前に関数形の仮定を置かず特徴量と予測・推定の非線形な関係を柔軟に捉えることができます。

図8:PDPの分析フロー(一部画像はInterpretable Machine Leaning : Guide for Making Black Box Models Explainable[12]より引用)

Partial Dependence Function

\hat{f_s}(x_s) = E_c[x_s, x_c] = \int \hat{f_s}(x_s, x_c)p(x_c)dx_c

\hat{f_s}(x_s):学習済みモデル
x_s :興味のある特徴量
x_c :それ以外の特徴量
* 実装の場合、分析者がx_s を恣意的に範囲を決め分割する必要がある。

推定式

\hat{f_s}(x_s) = \cfrac{1}{n}\sum_{i}^n \hat{f_s}(x_s, x_c^{(i)})

図9:PDPによる特徴量と予測結果の関係性プロット例(引用元: Interpretable Machine Leaning : Guide for Making Black Box Models Explainable[12])

PDPでは、最初に目的に合わせてAI(機械学習)モデル(この場合では\hat{f_s}(x))を構築し、興味のある特徴量x_sとそれ以外の特徴量x_cに分割します。その後学習したモデル\hat{f_s}(x)を利用し、興味ある特徴量以外を周辺化(推定式を利用)予測結果の平均を算出し、可視化を行います。PDPも構築したAI(機械学習)モデルを利用するため、構築するAI(機械学習モデルを選ばず、特徴量と目的変数の関係性を見ることができます。

解釈可能なモデルを生成

ここではExplainable AIの3つのアプローチのうち「解釈可能なモデルを生成」に分類される「CORELS」について紹介します。Explainable AIにおける「解釈可能なモデルを生成」では、そもそも解釈性の高いモデルを作成することを目的とします。

CORELS(Certifiably Optimal Rule List)

CORELSは、Angelino et al.(2017) [2]で考案された、ルールリストという決定木の亜種を学習し、解釈性の高いモデルを生成する手法です。特徴量に関してIf-thenでルールリストを作っていきます。

図10:CORELSの分析フロー

目的関数(ルールリストd)

R(d,x,y) = L(d,x,y) + \lambda * length(d)

L:損失関数
d:ルールリスト
p:ルールリストdのprefix
x:特徴量
y:目的変数
\lambda :正則化パラメーター
length(d) :ルールリストdのおけるルールの数(number of prefix)

CORELSでは、扱うデータとしてカテゴリカルデータを想定し、カテゴリカルな特徴空間でルールリストを構築するために、組み合わせ最適問題を各種探索の枝刈りを用いて高速化を行い、最終的に解釈性の高いモデルを構築していきます。

解釈可能なモデルで近似

ここではExplainable AIの3つのアプローチのうち「解釈可能なモデルで近似」に分類される「Born Again Tree」について紹介します。Explainable AIにおける「解釈可能なモデルで近似」では、精度は高いが解釈性の低いAI(機械学習)を解釈性の高いモデルで表現することを目的とします。

Born Again Tree

Born Again Treeは、Breiman and Shang(1996)[3]で考案された、予測精度は良いが解釈性が低いAI(機械学習)モデルから解釈性の高い決定木によって近似し、予測用モデルと解釈用モデルで予測精度と解釈性を両立させる手法です。

図11:Born Again Treeの分析フロー

図12:Born Again Treeの分析イメージ
(引用元: アンサンブル木モデル解釈のためのモデルの簡略化[21])

Born Again Treeでは、図11のように、最初に予測精度の高いAI(機械学習)モデルを構築し、その後学習したモデルを使い擬似訓練データを生成します。この時入力データである特徴量からランダムにサンプリングを行い、学習モデルで予測させ、サンプリングデータと学習結果を疑似訓練データとします。その後生成した擬似訓練データを利用し、解釈性の高いAI(機械学習)モデルを構築します。そして予測精度の高いモデルと解釈性の高い2つのモデルから予測精度と解釈性を実現させます。

Explainable AIの研究動向では、Explainable AIの3つのアプローチである「特徴量の可視化」、「解釈可能なモデルを生成」、「解釈可能なモデルで近似」とそれに属する4つの手法について紹介しました。これ以外にもExplainable AIの手法は多く存在し、Explainable AIは近年のトレンドの1つになっていることから日々その手法は増加していると考えられます。

今回紹介した手法以外のExplainable AIの手法を知るには、Explainable AIのサーベイ論文であるGuidotti et al.(2018)[7]やAdadi and Berrada(2018)[1]やWebで無料公開されているExplainable AIの教科書的な存在である”Interpretable Machine Leaning : Guide for Making Black Box Models Explainable”[12]がおすすめです。

Explainable AIの応用例

ここでは、実社会でExplainable AIが実装されている応用例を3点ほど紹介します。

Google Explainable AI

「Google Explainable AI」はGoogleが提供する機械学習開発・運用サービスの1つで、これは同じくGoogleが提供している「Auto Tables」「Could AI Platform」上のAI(機械学習)モデルに対して利用できるものです。Explainable AIのアプローチとしては、「特徴量の可視化」に分類できます。

図13:Google Explainable AI
(引用元:Google Explainable AI HP[9])

これは構築した学習済みのモデルにおける各特徴量が予測結果に与える影響を可視化し、モデルのデバック、モデルの最適化を効率的に行えるといったものです。

simMachines(isid)

「simMachines」は、株式会社電通国際(isid)サービスが提供するWebベースのAI予測器生成・要因分析ツールです。Explainable AIのアプローチとしては、「特徴量の可視化」に分類できます。

図14: simMachines分析例(引用元:isid HP[20])

図14は、simMachinesの分析例ですが、AI(機械学習)モデルの予測と要因を同時に出力してくれます。内部のアルゴリズムとして、Similarity Searchの考え方を元にR-1という独自エンジンを採用しています。また特徴としてノンプログラミングでAI(機械学習)モデルを構築し、構築時点でAPI化し、業務に取り込むことができます。

網膜疾患の3次元画像診断(Deep Mind)

網膜疾患の3次元画像診断はGoogleの傘下で、Alpha Goで有名なDeep Mind社と生物医学研究機関NIHRの共同研究で、網膜疾患の診断を高い精度で根拠を持って実現することができます。Explainable AIのアプローチとしては、「特徴量の可視化」に分類できます。

図15: 網膜疾患の3次元画像診断の分析プロセス (引用元: Fauw et al.(2018)[4])

このAI(機械学習)モデルでは、眼科病院の患者由来の光干渉断層(optimal coherence tomography; OCT)スキャンの3次元画像を対象として、熟練した臨床医と同等以上の精度を実現しています。また予測精度と同時に、画像診断の根拠になった画像の特徴を提示することができます。これは、セグメンテーションの深層学習モデルとクラス分類の深層学習モデルの2段階アーキテクチャーを採用しています。

ここでは、実社会でExplainable AIが実装されている応用例を3点ほど紹介しました。今回紹介した応用例は全て、Explainable AIの3つのアプローチにおける「特徴量の可視化」のアプローチでした。つまり予測に寄与した特徴量の大きさを可視化することで説明性を獲得するといったものでした。また近年では、予測・推定した理由を明らかにできない通常のAI(機械学習)モデルの社会実装は進んできましたが、Explainable AIの社会実装はあまり進んでいない印象を受けました。

展望

これまでに「Explainable AI」をテーマとして、Explainable AIについて社会的に求められるようになった背景、最近の研究動向、応用例を紹介してきました。Explainable AIの社会的な背景としては、現状のAI(機械学習)ではクリティカルな業務(医療など)を任せることができず、世界中で解釈性の高いAI(機械学習)が求められていることがわかりました。Explainable AIの研究動向では、近年Explainable AIの論文は増加傾向にあり、特徴量の可視化、解釈可能なモデルを生成、解釈可能なモデルで近似など様々な方法がとられていました。Explainable AIの応用例では、Explainable AIの社会実装は始まったばかりでこれから増加すると考えられます。

AI(機械学習)モデルの開発者からの視点でExplainable AIを見ていくと、今現在のExplainable AIでは、完全にAI(機械学習)モデルを説明してくれるものではないと認識する必要性と構築したAI(機械学習)モデルのデバックに使うことができると考えられます。

図16:LIMEを利用した:狼とハスキーの分類問題と予測根拠(引用元: Ribeiro et al.(2016)[6])

図16はLIMEを利用し、判断の怪しいAI(機械学習)モデルの予測判断の根拠を明示しています。このAI(機械学習)モデルでは画像からハスキーと狼を判断することを目的としていますが、予測ではハスキーの画像を狼と間違えています。通常のAI(機械学習)モデルではただ間違えているということしか情報はありませんが、LIMEを利用することで背景画像の雪から狼として判断していることがわかります。結果として構築したAI(機械学習)モデルは、背景画像も予測判断の要素としていたことがわかり、修正することができます。 この場合ですと、学習データに偏り(ハスキーは雪ではない背景、狼は雪の背景)があると考えられるため、学習データの偏りをなくすもしくは学習データを増やす(ハスキーは雪の背景、狼は雪以外の背景)ことが修正として考えられます。

このようにExplainable AIは今までは予測の判断が「ブラックボックス」であったAI(機械学習)モデルの予測・推測の根拠を提示し、効率よくAI(機械学習)モデルを構築することが可能と考えられます。

現状のExplainable AIの課題として、Explainable AI はAI(機械学習)モデルの予測・推測の計算工程を完全に明らかにするものではありません。またAI(機械学習)モデルの予測・推測の根拠を完全に示すものでもありません。これは現状のExplainable AIが万能ではなく、「ブラックボックス」となっているAI(機械学習)モデルの仕組みを完全に把握し、説明している訳ではないからです。あくまで現状のExplainable AIは、「ブラックボックス」となっているAI(機械学習)の予測・推測の根拠の一部を説明または別の解釈性の代替手法で近似している方法と認識し利用する必要があると考えられます。ただし、これはExplainable AIの限界ではなくExplainable AIという研究領域が発展途上であり、今後のそのAI(機械学習)としての解釈性と精度が高まりその必要性はより高くなると考えられます。

最後に、冒頭で述べたように昨今ではAIの社会実装が1つのトレンドとなっており、社会のありとあらゆる場所で顕在的、潜在的にAIの社会実装が必要となっています。また内閣府が提示している”サイバー空間(仮想空間)とフィジカル空間(現実空間)を高度に融合させたシステムにより、経済発展と社会課題の解決を両立する、人間中心の社会(Society)”である「Society5.0」(内閣府HP[22])という狩猟社会、農耕社会、工業社会、そして現在の情報社会の次の第5の社会が来ることが目前となっています。この社会ではありとあらゆるものがIoT(Internet of Things)で繋がりデータをビッグデータとして蓄積し、AI(人工知能)により必要な情報が必要な時に提供され、ロボットや自動走行車などによって社会課題を解決する社会と言われております。その社会の中で、AI(人工知能)は高い必要性と重要な役割を有していますが、現状のAI(機械学習)では中身が「ブラックボックス」となっており、高い精度で予測・推測ができるけれど、根拠を提示できないものでは社会に求められている役割を十分に果たすことは厳しいと考えられます。故に予測・推測の根拠を提示するExplainable AIは今後の社会に必要不可欠なものになると考えられます。

ビジネスの視点においても、今後の社会が「Society5.0」に遷移していくことを考慮すると、Explainable AIを取り入れることは競争優位の源泉となりこの不確実性の高い社会で価値を提供し続ける大きな要因となると考えられます。

今回は新卒研修の技術調査課題「Explainable AIに関する技術調査」でまとめた結果を紹介しました。Explainable AIに関しては、聞いたことはありましたが詳しくは知らなかったので、この機会にExplainable AIの社会のニーズ、研究動向、応用例などを知ることで、既存のAI(機械学習)に関する理解も深まり充実した時間となりました。このほかにも2ヶ月間の研修を通じてデータサイエンティストに必要な要素を深く学べた気がします。まだまだ社会人が始まったばかりで未熟者ですが、足りない要素を学びながら会社に貢献、広くは社会に貢献できるようチームで価値を創造していきたいと思っています。

ALBERTではともに最先端の課題に挑戦するメンバーを募集しています。興味をお持ちいただいた方は、こちらまでお問い合わせください。

Reference

  1.  Adadi, A., & Berrada, M. (2018). Peeking inside the black-box: A survey on Explainable Artificial Intelligence (XAI). IEEE Access6, 52138-52160.( https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8466590)
  2. Angelino, E., Larus-Stone, N., Alabi, D., Seltzer, M., & Rudin, C. (2017). Learning certifiably optimal rule lists for categorical data. The Journal of Machine Learning Research18(1), 8753-8830.(http://www.jmlr.org/papers/volume18/17-716/17-716.pdf)
  3. Breiman, L., & Shang, N. (1996). Born again trees. University of California, Berkeley, Berkeley, CA, Technical Report1, 2. (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.367.9399&rep=rep1&type=pdf)
  4. De Fauw, J., Ledsam, J. R., Romera-Paredes, B., Nikolov, S., Tomasev, N., Blackwell, S., … & van den Driessche, G. (2018). Clinically applicable deep learning for diagnosis and referral in retinal disease. Nature medicine24(9), 1342-1350.(https://discovery.ucl.ac.uk/id/eprint/10056194/1/Diagnosis%20and%20referral%20in%20retinal%20disease%20-%20updated.pdf)
  5. Friedman, J. H. (2001). Greedy function approximation: a gradient boosting machine. Annals of statistics, 1189-1232.(https://projecteuclid.org/download/pdf_1/euclid.aos/1013203451)
  6. Ribeiro, M. T., Singh, S., & Guestrin, C. (2016, August). ” Why should i trust you?” Explaining the predictions of any classifier. In Proceedings of the 22nd ACM SIGKDD international conference on knowledge discovery and data mining (pp. 1135-1144). (https://dl.acm.org/doi/pdf/10.1145/2939672.2939778)
  7. Riccardo Guidotti, Anna Monreale, Salvatore Ruggieri, Franco Turini, and Dino Pedreschiz. (2018) A Survey Of Methods For Explaining Black Box Models Cornel University(https://arxiv.org/pdf/1802.01933.pdf)
  8. 『Explainable artificial intelligence (xai)』(https://www.darpa.mil/attachments/XAIProgramUpdate.pdf)
  9. 『Explainable AI ベータ版』(https://cloud.google.com/explainable-ai/)
  10. 『General Data Protection Regulation GDPR』(https://gdpr-info.eu/)
  11. 『ICML 2017 tutorial on interpretable machine learning』(http://people.csail.mit.edu/beenkim/icml_tutorial.html)
  12. 『Interpretable Machine Learning A Guide for Making Black Box Models Explainable.』(https://christophm.github.io/interpretable-ml-book/index.html)
  13. 『LIMEで機械学習の予測結果を解釈してみる』(https://qiita.com/fufufukakaka/items/d0081cd38251d22ffebf)
  14. 『Local Interpretable Model-Agnostic Explanations (LIME): An Introduction』(https://www.oreilly.com/content/introduction-to-local-interpretable-model-agnostic-explanations-lime/)
  15. 『On the Role of Trust and Explanation for AI adoption in Industry』(https://www.mobilit.ai/wp-content/uploads/2019/06/9.35-AM-Lecue-Thales-OnTheRoleOfTrustAndExplanationForAIAdoptionInIndustry-CRIAQ-MobilitAi1.pdf)
  16. 『機械学習の説明可能性への取り組み - DARPA XAI プロジェクトを中心に 』(https://www.jst.go.jp/crds/sympo/201906_JSAI/pdf/02.pdf)
  17. 『国際的な議論のためのAI開発ガイドライン案』(https://www.soumu.go.jp/main_content/000499625.pdf)
  18. 『説明可能なAIによる 「信頼できる診断と予測」の実現』(https://www.pwri.go.jp/caesar/lecture/pdf12/3_watanabe.pdf)
  19. 『AIはなぜその答えを導き出したのか ~根拠を見える化する「説明可能なAI」~』(https://blog.global.fujitsu.com/jp/2018-12-27/01/)
  20. 『WHYが分かるAIソリューション「simMachines」』(https://www.isid.co.jp/solution/simmachines.html)
  21. 『アンサンブル木モデル解釈のためのモデルの簡略化』(https://www.slideshare.net/SatoshiHara3/ss-92587923)
  22. 『内閣府:Society5.0』(https://www8.cao.go.jp/cstp/society5_0/)
  23. 『機械学習の用語辞典 XAI(Explainable:説明可能なAI) /解釈可能性(Interpretability)とは?』(https://www.atmarkit.co.jp/ait/articles/1908/19/news022.html)
Viewing all 191 articles
Browse latest View live