Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

はじめに

近年、人工知能は私たちの生活に溶け込み、様々な利便性をもたらしてきました。対話型のAIなど、今ではAIは仕事やプライベートといった際に欠かせない存在となってきています。そんなAIにたよる日常生活が当たり前になりつつあるこの時代において、AIの信憑性や、人の学習能力の低下、情報の操作、そして情報漏洩といったAIの危険性が重視され始めています。こういった危険性が顕在化している背景に、AIの急速な大衆化があると考えます。AIの研究者とは違い、未知のものである一般の人々がインターネットやメディアにより、ここ数年であっという間にAIというものが身近なものとなり、簡単に利用できるようになりました。しかし、人々は突然現れた、日常で欠かせない得体の知れないAIというものを「ただ便利だから」、「みんなが使っているから」、ということで十分理解せずに利用しようとしているのではないでしょうか。人々の日常生活に溶け込む人工知能はもはや、現代社会において教養として学ぶ必要があります。なんとなく文を送ったら、返事が来たというような、裏側を見ない表面的なAIの理解だけでの使用は、浅はかで、無責任なAIの使用と言えるのではないでしょうか。AIはどのような仕組みで構成されているのか、裏側でどのような処理がされているのか、そういったAIの裏側を学ぶことで、私たちは真のAIとの共存が可能になるでしょう。このドキュメントでは、現代のAIの基礎である深層学習の仕組みを、新しいプログラミング言語Rustで一から実装するプロセスを通じて、AIの裏側を学びます。高校生である筆者らにとって、この開発は大胆な挑戦であり、多少荒々しい冒険となりますが、ぜひ最後までお付き合いください。

フレームワーク StuCrs のコンセプト

現在、深層学習のフレームワークはTensorFlowやPytorchというように複数存在します。それらのフレームワークには様々な特徴、コンセプトがありますが、そんな中で私たちは一からRustで深層学習のフレームワーク: StuCrs を開発、実装しました。

TensorFlowやPyTorchといったフレームワークはオープンソースであり、公開されています。試しにGitHubでTensorFlowの中のコードを見てみましょう。するとどうでしょうか、ファイルやフォルダーがたくさん存在し非常に複雑に構成されています。また、ファイルの中のコードもパフォーマンスを最適化するために、様々な関数が組み合わさって、読み手にとって解読しづらいものとなっています。既存の多くのフレームワークは様々なプロジェクトでフレームワークとして利用されるためにパフォーマンスや機能の豊富さ、バグの少なさなどが重視されます。そこで私たちは逆の立場として、シンプルな構造のフレームワークの構築を目指し、それを読者が理解して1からフレームワークを実装してもらうことで深層学習の原理を探究してもらう、そんな目標をもってこのような研究に至りました。

また、Rustという言語を選択した理由として、Rust言語のコンピューターに寄り添う仕様にあります。近年人気の高いpython言語はAIの分野で高い地位を得ていますが、それはその言語が人間に理解しやすい言語であり、設計がわかりやすいからです。しかし、そのかりやすさが故にコンピューターの本来の特性を十分理解せずに利用できてしまうという特徴もあります。一方Rust言語はコンピューターに寄り添った言語で、確かに人間にとって理解しづらい言語です。しかしながら、Rustを一つ一つ自らの手で実装することで、コンピューターとの真の対話をし、本当のプログラミング、そしてコンピューターによるAIの計算を真髄から学ぶことができるのではないでしょうか。私たちはコンピューター・AIの計算処理のアルゴリズムを実際に実装し、学ぶ教育ツールの一つとしてこのようなアプローチを提案します。

どのような人を対象としているか

このドキュメントを見ている方はすでにこの研究がどのようなものかある程度把握されていると思いますが、改めてどのような方のためか簡単に示します。

  • Rust言語を学ぶためにのRustの練習のサンプルとして利用したい方。
  • 深層学習のフレームワークを一から実装し、原理から学びたい方。
  • Rustでの機械学習、深層学習の分野の開発に興味がある方。

学ぶに当たってあらかじめ必要な知識

このドキュメントは一から実装するにあたって、学びたいと考えている様々なユーザーが理解できるよう分かりやすく書きましたが、十分理解して進めるためにあらかじめいくつかの知識が必要だと考えています。

  • Rust言語について基本的な仕様を理解していること。

    このドキュメントではRustの特徴と深層学習の知識をなるべく多く説明していますが、主に深層学習の原理を学ぶことをこのドキュメントの第一の目的としているため、多少高度なRustの知識の説明を省略していることがあります。Rustの仕様をあらかじめ理解してもらうのが良いと思います。ただし、このドキュメントで使用するRustのコードは検索すれば簡単に理解できる基礎的なものを使用しているので、特に高度なスキルは必要ありません。

  • 深層学習の概要をあらかじめ理解していること。

    このドキュメントは深層学習の原理を探究するものですが、一から実装するという高度な開発を行うため、事前に深層学習の全体像を把握しておいた方が理解が進みます。

  • 数学の知識。

    AIの分野ではとりわけ数学が多く応用されています。このドキュメントの場合、主に微分と行列の知識が必要です。例えば、sin,cosの微分はもちろん、tanhや偏微分、行列積などといった高度な数学をモデル化します。

ドキュメントの進め方

はじめにバイナリクレートを一つ用意してください。このクレートはプログラムをテストするためのファイルですので、名前は何でも構いません。(test_⋯.rsなど)はじめのうちはこのファイルのmain()の外に構造体やトレイトを定義し、プログラムをこのファイルのmain()で書き、そこで実行します。ある程度関数や構造体が増え、複雑になってきたら、ライブラリクレートをを新たに作成します。このクレート名はstucrsという感じにフレームワークの名前にするのがおすすめです。そこに今まで作成した構造体たちを移し、ライブラリクレートからテスト用ファイルにインポートする形を取ります。なお、移行するタイミングやその方法は記載してあります。

注意

このドキュメントはPCでの閲覧を推奨しています。グラフや数式が正しく表示されない可能性があります.

環境

本研究のリポジトリの中に含まれるDockerfilecompose.yamlファイルを用いてコンテナを立ち上げてください。(Dockerに関する使い方の説明は省略します。)
注意 DockerfileのFROM のところは自分の環境に適したCUDAのバージョンを指定してください。また、NVIDIA製のGPUを使用しない場合、ubuntu20.04をお使いください。

docker build -t cuda-im ./ #イメージ名はcuda-im
docker compose up -d # イメージ名をcuda-imと設定しているので、イメージ名を変更したい場合はyamlファイルの中を変更してください。

環境の詳細はGitHubのREADMEをご覧ください。