プログラミングに微分積分の知識は必要?線形代数・確率統計・物理学は?
こんにちは!
現役Webエンジニアの今井(@ima_maru)です。
大学(特に理系)において、線形代数の行列の計算、微積分のフーリエ変換、確率統計学のような数学知識はプログラミングで必要なのでしょうか?
- 何に使うの?
- 勉強して意味あるの?
と思う方もいると思います。
どんなシステムにどんな数学的知識が使われているのでしょうか。
プログラミングで数学の知識は必要?
まず結論から言います。
プログラミングにおいて理系大学で学ぶような物理学の知識や高等な数学的知識は、作るものによって必要か必要でないかは異なります。
というのは、一般的なWebページやアプリケーションを作るのには、そのような物理学の知識や数学的知識は必要にはなりません。
ではどのようなものが物理学の知識や数学的知識を必要とするのでしょうか。
- 微分積分学:信号処理・機械学習
- 線形代数学:機械学習・コンピューターグラフィック
- 確率統計学:機械学習・データサイエンス
- 物理学:ゲームプログラミング
微分積分学を必要とする分野
微分積分は、「信号処理」「機械学習」などに使われています。
信号処理で微分積分学が使われる
信号処理(しんごうしょり、signal processing)とは、光学信号、音声信号、電磁気信号などの様々な信号を数学的に加工するための学問・技術である。
信号処理 - Wikipedia
簡単に言えば、信号処理とは「信号を加工する技術」です。
画像データをフィルタリングしたり、電波を変調したりと、非常に多くの分野に応用が効く技術です。
- 音響技術:MP3など音声ファイルの圧縮
- 画像処理:デジタルカメラ・画像編集・JPEGなどの画像ファイル圧縮
- 音声処理:音声合成・音声認識・音声符号化
- 動画処理:動画ファイルの圧縮・CGアニメーション
- 医療技術:X線CTやMRIなどの断層撮影・超音波検査・脳波・脳磁図の解析
- 通信:レーダー技術・アンテナ技術・暗号化など
- 天文学:各種望遠鏡の信号解析など
微分積分学の知識がどのように信号処理に用いられているのかを知りたい方は、以下の記事等を参考にすると良いでしょう。
機械学習で微分積分学が使われる
微分積分学の知識は機械学習で使われています。
例えば、誤差逆伝播法と呼ばれる学習方法は、微分積分学の「偏微分」が鍵となっています。
ただ、現在は機械学習のフレームワークやライブラリが進化していて、それらを使うのであれば微分積分学の深い知識は必要ありません。
機械学習の仕組みを知るために少し学ぶ程度で問題ないでしょう。
逆に言えば、機械学習の内部の処理やアルゴリズムなどを研究していきたいという方は、微分積分学の知識が必須になるでしょう。
線形代数学を必要とする分野
線形代数学とはどういう学問なのかについては詳しく触れません。
線型代数学(せんけいだいすうがく、英: linear algebra)とは、線形空間と線形変換を中心とした理論を研究する代数学の一分野である。現代数学において基礎的な役割を果たし、幅広い分野に応用されている。
線型代数学 - Wikipedia
線形代数学が必要とされているのは、同じような処理かつ大量の処理をまとめて効率的に計算することができるからです。
線形代数学を勉強すると、「行列演算」というものに出会うと思います。
この行列演算は「大量のデータをまとめて効率的に処理できる」という性質があります。
その性質が、膨大な処理を必要とする機械学習の計算やグラフィックの描画処理で活躍します。
機械学習で線形代数学が使われる
プログラミング言語「Python」にはこの線形代数学における行列演算処理についてのライブラリがたくさんあるため、人工知能の分野で活躍しています。
コンピューターグラフィックで線形代数学が使われる
コンピューターグラフィックの分野でも線形代数学の処理は用いられます。
一番簡単な例で言えば、ゲームの描画処理です。
リアルタイムで影がつく3Dゲームであれば、3次元上の物体からどこに影がついて自分の視点からどう見えるのかということを瞬時に計算しなくてはいけません。
これは解像度やFPSによって計算量が増えていきます。
最近のゲームであれば、非常に高解像度かつ高FPSですので、描画において非常に多くの処理が必要となります。
そんなときに、線形代数学の行列演算が活躍します。
詳しく知りたい方は、少し難しいですが以下の記事等を参考にすると良いでしょう。
確率統計学を必要とする分野
確率統計学の意味は、実際のデータに近似したモデルを作成しそれに当てはめて物事を考えることにあります。
ビジネスやマーケティングにおいて統計を取ることは非常に大事です。
また、機械学習の基礎にもなるので、データサイエンティストや機械学習エンジニアを目指す人は絶対に学んでおくべき分野です。
物理学を必要とする分野
物理学の知識は、主にゲームプログラミングで必要になってきます。
例えば、以下のような処理を実装するには必要不可欠と言えるでしょう。
- 物体の軌道の計算
- 物体の速度変化
- 衝突した際の挙動
- 物体の強度
- 波動の表現
- 熱・温度の表現
将来「モノを動かすプログラム」を作りたいと考える方は、物理学をしっかりと学んでおくと良いでしょう。