Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

東大1年生にJulia教えてみた

 東大1年生にJulia教えてみた

JuliaLang Japan 2025、メイントーク2
2025/12/12、@東京科学大学、東京
https://julialangja.github.io/julialangja2025/

松井勇佑(東京大学)https://yusukematsui.me/index_jp.html

東京大学の全ての1年生は、研究活動を体験する少人数チュートリアル講義である「初年次ゼミナール」を受講します。私はJuliaを用いて線形代数・最適化・機械学習を体験する初年次ゼミナール講義を開講しました。その取り組みの内容を紹介し、大学初等教育において学生が線形代数の内容を実際に自身でコーディングして計算することの重要性を議論します。そしてそのために、Google Colaboratory上で簡単に実行可能で、行列演算をシンプルに記述出来るJuliaの可能性を論じます。

Avatar for Yusuke Matsui

Yusuke Matsui

December 12, 2025
Tweet

More Decks by Yusuke Matsui

Other Decks in Education

Transcript

  1. 2 松井勇佑 ✓ コンピュータビジョン ✓ データ構造+機械学習 http://yusukematsui.me 東京大学・情報理工学系研究科・電子情報学専攻・講師 @utokyo_bunny @matsui528

    漫画のゼロショット理解 [Li+, ACMMM 24] 高速な多様近傍探索 [Matsui, CVPR 25] 学習型ソート [Sato & Matsui, TMLR 25]
  2. 6 大学の(主に工学部を想定した)初等数学教育 ➢ 線形代数は重要 ➢ 大学1年から習うが、うまみがわかるのは卒論以降 ➢ 本当は座学に加えコーディングしつつ学ぶといい ✓ 自分でプログラムを書いて計算しないと身に着かない

    ➢ しかし、1年生はプログラミング初学者 ✓ 計算以前にコーディングが大変 ➢ 1年生の段階で、線形代数を学びつつ、 コーディング演習も出来ないか? https://ja.wikipedia.org/wiki/%E3%81%B9%E3%81%8D%E4%B9%97%E6%B3%95
  3. 7 Pythonでいい・・?大変かも・・?? 松井、“線形代数演習講義へのjulia導入を考える”、2022 https://mti-lab.github.io/blog/2022/12/22/julia_linear_algebra.html A = np.array([[10, 20, 30], #

    3x3の行列 shape=(3, 3) [40, 50, 60], [70, 80, 90]]) v1 = np.array([[1], [2], [3]]) # 3x1の行列 shape=(3, 1) v2 = np.array([[1, 2, 3]]) # 1x3の行列 shape=(1, 3) v3 = np.array([1, 2, 3]) # ベクトル shape=(3, ) v4 = [1, 2, 3] # リスト A @ v1 # 計算できる。OK。(3x3) @ (3x1) v1 @ A # エラー。OK。(3x1) @ (3x3) A @ v2 # エラー。OK。(3x3) @ (1x3) v2 @ A # 計算できる。OK。(1x3) @ (3x3) A @ v3 # 計算できる。エッ???? v3 @ A # 計算できる。エッ???? A @ v4 # 計算できる。エッ???? v4 @ A # 計算できる。エッ???? 種類多い・・ ? ? ➢ Pythonは行列ベクトルの表現から 既に自明では無さげ ➢ その時点で初学者は混乱しうる ➢ 「行列を書く」「行列積を計算」 だけでいいので直感的にやりたい
  4. 8 # 行列 A = [10 20 30; 40 50

    60; 70 80 90] # 縦ベクトル (3x1) v1 = [1; 2; 3] # 横ベクトル (1x3) v2 = [4 5 6] A * v1 # OK v1 * A # ダメ A * v2 # ダメ v2 * A # OK ➢ 非常に直感的 ➢ プログラミング初学者の1年生でも 行列演算を直感的に書ける ➢ MATLABの流れをくむ、計算のための言語 ➢ 構文等もシンプル。モダンなエコシステム ➢ しかし、環境構築が大変であった ➢ 初学者にインストールさせることは難しい ➢ 2025/3よりColabで使えるように ➢ 線形代数の演習のための有力オプション! に注目!
  5. 11 初年次ゼミナールとは ➢ 少人数チュートリアル講義 ✓ 研究入門・主体的な学び ✓ 夏学期に週1コマ ➢ 各学科などが講義を多数開講

    ✓ 学生はそのうち1つを選ぶ ✓ 1つの講義は20人ほど ✓ グループ協同学習を重要視 ➢ 東大の全1年生が履修する https://fye.c.u-tokyo.ac.jp/
  6. 12 初年次ゼミナールとは ➢ 少人数チュートリアル講義 ✓ 研究入門・主体的な学び ✓ 夏学期に週1コマ ➢ 各学科などが講義を多数開講

    ✓ 学生はそのうち1つを選ぶ ✓ 1つの講義は20人ほど ✓ グループ協同学習を重要視 ➢ 東大の全1年生が履修する https://fye.c.u-tokyo.ac.jp/ 1.アカデミックな知の現場へ――大学での学びとは 2.研究のプロセス 3.研究倫理 4.学術論文の種類と構成 5.文献検索 6.文献の引用 7.レポート 8.ピアレビュー 9.グループワーク 10.プレゼンテーション ➢ 標準教科書がとても良い ➢ 研究の心がまえ ➢ 卒論前に再読すると良さそう 若杉&宮島、“科学の技法 第2版”、東京大学出版会 https://www.utp.or.jp/book/b10045059.html
  7. 13 (前Pの教科書目次に掲載されている過去の講義の例) 1.老化のメカニズムに迫る――アンチエイジングは可能か?(江頭正人) 2.建築の可能性(川添善行) 3.体験的ものづくり学――3Dプリンタによるコマづくり(三村秀和ほか) 4.機械学習入門(杉山 将・佐藤一誠) 5.数学・物理をプログラミングで考える(田浦健次朗) 6.知能ロボット入門(鳴海拓志・中嶋浩平) 7.私たちの身近にあるタンパク質を科学する(片岡直行ほか)

    8.身近な物理でサイエンス(松本 悠) 9.薬学における生物学の役割と貢献(中嶋悠一朗ほか) 10.分子の形を知り,物質をデザインする(宮島 謙) 11.モーションコントロール入門――ロボットや車両を上手に動かす科学(古関隆章) 12.駒場キャンパスやその周辺のまちを歩き、その空間について考える(中島直人・廣井 悠) 13.電子回路で学ぶモデリング手法(三田吉郎) 14.工学×デザイン――ワークショップで学ぶ理系のためのデザイン(村上 存・泉 聡志) 初年次ゼミナールの講義の例 ➢ 2024から松井が初年次ゼミを担当することに ➢ 興味があった「コーディングによる線形代数演習講義」にチャレンジしたい ➢ Juliaを用いて線形代数・最適化・機械学習に入門する講義を開講
  8. 16 スケジュール ➢ 1セット目。 ➢ 2人で1グループ ➢ 問題を自分たちで設定 ✓ 今年はテーマを受験数学に

    ✓ 東大1年生にとって最も身近 ➢ Juliaでプログラミング ➢ 発表 ➢ 2セット目。 ➢ テーマは線形代数 ➢ 3セット目。 ➢ テーマは最適化・機械学習
  9. 17 スケジュール ➢ 2セット目。 ➢ テーマは線形代数 ➢ 3セット目。 ➢ テーマは最適化・機械学習

    発表例: ➢ Juliaで解く東大数学20XX … ➢ 1セット目。 ➢ 2人で1グループ ➢ 問題を自分たちで設定 ✓ 今年はテーマを受験数学に ✓ 東大1年生にとって最も身近 ➢ Juliaでプログラミング ➢ 発表
  10. 18 スケジュール ➢ 2セット目。 ➢ テーマは線形代数 ➢ 3セット目。 ➢ テーマは最適化・機械学習

    発表例: ➢ Juliaで解く東大数学20XX … 発表例: ➢ ガウスの消去法・・・ ➢ 1セット目。 ➢ 2人で1グループ ➢ 問題を自分たちで設定 ✓ 今年はテーマを受験数学に ✓ 東大1年生にとって最も身近 ➢ Juliaでプログラミング ➢ 発表
  11. 19 スケジュール ➢ 2セット目。 ➢ テーマは線形代数 ➢ 3セット目。 ➢ テーマは最適化・機械学習

    発表例: ➢ Juliaで解く東大数学20XX … 発表例: ➢ ガウスの消去法・・・ 発表例: ➢ k-means ➢ 巡回セールスマン ➢ ・・・ ➢ 1セット目。 ➢ 2人で1グループ ➢ 問題を自分たちで設定 ✓ 今年はテーマを受験数学に ✓ 東大1年生にとって最も身近 ➢ Juliaでプログラミング ➢ 発表
  12. 20 所感・これから ➢ プログラミング経験ゼロからガウスの消去法を手で書いて実行できるまでに ✓ 狙い通り!週に1コマ、チュートリアルスタイルの講義でここまで達成できた ➢ 機械学習に取り組む難しさ ✓ 非深層学習までは良さそうだが、GPUを用いる機械学習になるとハードルが

    グッとあがる(Flux前提になる) ✓ Transformerなどの現代的な機械学習との接続?JuliaでnanoGPT? ➢ 評価 ✓ 果たしてこの取り組みで本当に学生の線形代数の理解度は上がっているのか? ✓ 実際のところ「Pythonを教える場合」と比べてどうなのか? ▪ 思い:多くの学生は、PythonとCはどこかで習う。 ▪ Juliaを知ると人生が豊かになる(かも) 例:OOP vs 多重ディスパッチ ➢ 知見・ノウハウのシェア ✓ 似た取組みなどされている先生方、意見交換しましょう!