今日は『型、ついてますか? - 型の本質を振り返る -』の日です
Posted on July 8, 2016
Tweet
型の本質を振り返 りに来てますので、メモをとります。
ゴリ押し抜きのマイクロソフトテクノロジー紹介 / mihochannel さん
- Windows Windows と言わなくなってきた
- OSSを重視
- azureでデプロイするためのライセンス
- 開発者特典 : MSアカウントがあれば $25 / 月 がついてくる
- 使うのであれば売りに行きます!
- .NET core も出たよ
型、ついてますか? / 高野さん
メモは残しますが、内容に賛同するわけではありませんので悪しからず。
- 3時間で15人、1日で30人埋まってしまったので、拡充して100人
- 元ネタ「ライト、ついてますか」という本
- 問題解決の手引書らしい
- 型がどういう性質を持つのかを知る、のが型を議論するより先
- 高校からプログラミング、専攻はネットワーク、セキュリティ、言語処理、Smalltalk VM(バイト)
- 「できないことをやる」 日立、グリー、SORABITO
- 特定の言語ではなく、型、について
- 型が付いている == 静的型付けのこと
- 事前に変数の型を精査
- コンパイル、実行前のバグ発見
- 動的型付け
- 事前に変数の型を精査しない
- 評価によって型がわかる。実行時の型付け
- 静的型付け : コンパイルでは実行はしてない
- 実行ができるのは動的型付けだけ
- (原始は略)古代静的型付け : C言語。型が不明だとデータの扱い方がわからない
- 古代動的型付け : BASIC、シェルスクリプト
- システム記述の言語からユーザへの移行期
- システムコール呼べるシェルがある
- シェルを書く、という言葉に違和感(「IP」と呼ぶ違和感と一緒)
- 近代動的型付け : Perl
- sh + sed + awk + grep
- pearlは被った、shell(貝)との関連
- PCRE はperlのいい成果
- 近代静的型付け : C++
- オブジェクト指向
- PHP、Pythonも同じ時期
- 現代動的型付け Ruby、JavaScript
- 簡単にオブジェクト指向
- 現代静的型付け
- Java, Haskell, AltJS
- 強い形づけ。システム記述からの離脱。VM
- 原始動的型付け ニーモニック
a[2] == 2[a]
ポインタ
- 原子静的型付け : 型ありラムダ計算
- 古代はユーザフレンドリー、近代は新しいパラダイムの上乗せ、現代はその先
- 動的型付けと静的型付けは交互に成長
- どちらも抽象化が進んでいく
- 静的な型付けと見せかけて動的な型付けとかやばい
- ミスマッチが起きると新しいもの
- ドメイン : 今はWEB
- ポートは「アプリケーション番号」と呼ばれてた
- パラダイム
- ドメインに対して有効なパラダイム
- 抽象化
- オブジェクト指向より進んだ抽象化
- 動作するUML
- リソース
- GC、OOPは昔はきつい処理と見なされてた
- 副作用を考慮したshellが欲しい
- lsは副作用がない。mkdirは副作用がある
- 作ると、エンジニアライフを豊かにする
- LLoTにて、型のセッションがあるので、そちらをお楽しみに
Linear Types / niryuu さん
- LTとかけてた(気が付かなかった)
- Linear Types : 一度しか値を得ることのできないようなもの
- 型が厳密な理由 → 規則が厳密なので
- λ計算 : 計算とは何か。論理学 : 論理とは何か
- Curry-Howard対応
- 論理の手法を型へ → LinearTypes
- 直観主義と単純型付きλ計算
- 時間、リソースの概念が抜けている
- 自然演繹がよく使われるが、シークエント計算に注目
- シークエント計算のWeakningとContractionが重要
- contractionはweakningはいつも成り立つのか?
- リソースを考えると
- Linear Logicの特徴
- 古典論理 : 正しい物を正しい物で書き換え。美しい
- 直観論理 : 証明する手続きが必要 (計算と相性がよい)
- 線形論理 : 古典と直感を合わせたもの。論理式を消費。新しい性質
- Linar Types
- !はなんどでも使えることを表す
- Clean、Rustなどで孫(の孫)みたいなものが使われている
- Wadlerが並行性や分散性に利用
- Scalaの作者など
今日は『第14回数学カフェ「圏論」』の日です
Posted on July 2, 2016
Tweet
東大駒場に来てますのでメモを取ります。
圏論とは
- 圏論の父 S.Mac Lane
- arrowとdiagramで数学的体系の多くの性質を
- 可換図式
- 今日のテーマ: 位相幾何学とプログラミング
圏論の基礎 / 松森至宏さん
- 圏が初めての人向け
- 代数的位相幾何学の文脈から生まれた
- 自然変換を表現したかった
- 圏の定義
- \(Ob(C)\), \(Hom_c(,)\), \(\circ\)
- \(f : X \to Y\)
- \(\circ : Hom_C(Y, Z) \times Hom_C(X, Y) \to Hom_C(X, Z)\)
- \(1_X \in Hom_C(X, X)\) identity, \((h \circ g) \circ f = h \circ (f \circ g)\) composition
- \(f: X \to Y\), \(X\) domain, \(Y\) codomain
- これがwell-definedになるように \(Hom_C(X,Y) \cap Hom_C(X', Y') = \phi\)
- 例: \(Set\)
- \(Ob(Set)\) : 集合の集まり, \(Hom_{Set}(X, Y)\) XからYへの写像全体
- 例: \(cRing\) : 1を持つ可換環
- \(Ob(cRing)\) 1を持つ可換環, \(Hom_{cRing}(S,S)\) \(1\)を1に移す環準同型
- 環準同型の例 : 多項式環への代入写像
- 集合と集まりは違うもの? → 今日扱う圏は、小さい圏ということで
- \(F : C \to D\) 共変関手、反変関手
- \(F1_X = 1_{FX}\)
- \(F(g \circ f) = F g \circ F f\)
- 関手の例: 単位円
- \(A : cRing \to Set\)
- \(A : S \mapsto {(x, y) \in S^2 | x^2 + y^2 = 1}\)
- \(A : f \mapsto A f : (x, y) \mapsto (f(x), f(y))\)
- 関手を図形と思える例
- 関手の例: \(Hom_C(X, -)\)
- \(Y \mapsto Hom_C(X, Y)\)
- \(f \mapsto f_* = Hom_C(X, f) : \phi \mapsto f \circ \phi\)
- 「ここからは時間を気にせず、思う存分質問して下さい」
- 自然変換の定義 : \(\alpha : F \to G\)
- F : \({\alpha_X}_{X \in Ob(C)}\) \(\alpha_X : FX \to GX\)
- 可換になる
- \(\Rightarrow\) \(\dot \to\) とか使わない。 \(\to\) で。
- 共変関手の定義 \(D^C\)
- \(Ob(D^C)\) \(C\)から\(D\)への共変関手全体
- \(Hom_{D^C}\) 自然変換
- 例
- \(S \in Ob(cRing)\) について、 \(Hom{cRing}(S,)\) を \(Spec S\) と書く (Spectral)
- \(R = Z[x, y] / (x^2 + y^2 - 1)\)
- \(\alpha : Spec R \to A\)
- \(\alpha_S : \phi \to (\phi(x), \phi(y))\)
- \(\alpha_S\) は全部同型 \(Spec R \simeq A\)
- 表現可能関手 : 関手が \(Hom(...)\) と同型
- 米田の補題
- \(FX \simeq Hom_{Set^C}(Hom_C(X), F)\)
- 例:
- \(cRing, Q, A\)に適用
- \(AQ \simeq Hom_{Set^{cRing}}(SpecQ, A) \simeq Hom_{Set^{cRing}}(Spec Q, Spec R)\)
- 自然変換が有理点と思える。座標によらない (と感じた)
- Q). \((\frac{3}{5}, \frac{4}{5})\) は何に移る? A). \(\phi:(x, y) \mapsto (\frac{3}{5}, \frac{4}{5})\)
- ここから後半
- 直積の定義 : \(k : W \to X, l : W \to Y\) について \(h : W \to X \times Y\) がユニークに存在
- 同型を除いて一意に存在
- 例: Setでの
- 余積の定義
- ファイバー積(pull-back)の定義
- \(k : W \to X, l : W \to Y, f \circ k = g \circ l\) のとき、\(h : W \to X \times_Z Y\) が一意に存在
- 例: ベクトル束 : 「エックス、ワイ、ファイ・バー・プロダクト!」
- \(Z\) が1点だと、ファイバー積は直積になる
- ファイバー和(push-out)の定義
- 例: van Kampen の定義
- 極限の定義
- \(C, J\), \(F : J \to C\) \(lim F\)
- \(k_j : W \to F_j\), \(u : i \to j\), \(Fu \circ k_i = k_j\) のとき \(h : W \to Lim F\) が唯一存在
- 射影的極限(Projective limit)、逆極限(inverse limit)、などと言う
- 例: \(F : (1, 2) \to C\) 直積
- 例: \(F : (\to \leftarrow) \to C\) ファイバー積
- 例: \(F : N \to cRing, Fn = Z/p^nZ\) の時 \(Lim F = Z_p\)
- 余極限の定義: 帰納的極限、順極限
- 覚え方: \(Hom\)で書いた時の\(W\)の位置。極限を取ると小さくなる(←)イメージ
圏とHaskellの型 / Kinebuchi Tomohiko さん
- Haskellの型システムに出てくる圏論の概念
- 型 : 間違い検出、抽象化(1, 2, 3ではなく
Int
)、可読性、最適化 - Hask : 対象は型、射は一変数関数
- 対象 :
Integer
,String Maybe
,String
,[Integer]
- 数学の世界とHaskellの世界とdoble関数は似ている
- 関数は型?射? 圏論を使う意味は? 集合圏?
- 積 : tuple
- 余積 : Either
- 関手 :
Functor f
f
が型関数、map
が射関数fmap id == id
、fmap (f . g) == fmap f . fmap g
- 例:
Maybe
、[]
Just
はユニット?Just
は射なの?fmap
はなんでも拡張できるの? リストはベキ集合と思っていいの?Just
は無数に存在するの?- 自然変換 : 型変数に依存しない多相関数
- おしらせ「数学茶屋やります」「グッドマス」
Calculus of functor / simizt22 さん
- \(F : functor\) 位相空間の圏。 \(Top*\) 基点付き。\((X, f)\) から 同じ、またはSpectrumへの関手
- \(F : C \to D\) homotoy functor
- \(f\) weak homotopy equiv を \(Ff\) weak homotopy equv
- homotopy をlimit, colimit操作で保存するようにする
- \(F : C \to D\) k-excisive, polynomial functor of degree k について FX がhomotopy cocartesian
- cube : posetからTop
- Prop. \(F\) n-excisive, \(X\) strongy homotopy co-cartesian m-cube
- \(F(X \phi) \simeq ...\) ??
- 結論: Poset k。\(T_k\) は重ねられる。homotopy colimit が第k次近似になる。
- \(P_n F\) を重ねたもの。Taylor tower。Fのstable化したもの
- 微分とは? → \(P_k F \to P_{k-1} F\)
Fatgraphと圏 / 根上春さん
- ファットグラフ
- グラフの辺に順を入れる。方向を入れる
- リーマン面と相性がいい
- ファットグラフを圏に
- 対象: ファットグラフ、 \(\Gamma_0 \to \Gamma_1\)
- ツリー : 点の数が辺より1 個以上多い
- \(\Gamma_0 / F \semeq \Gamma_1\) \(F\) はツリー
- 曲面を構成するが、離散的な扱いができる
- タンパク質の立体構造をファットグラフに対応させるモデルがある。
今日は『RCO Study Night 「D-Waveが切り開く、量子コンピュータを活用する未来」』の日です
Posted on May 11, 2016
Tweet
来てますのでメモを取ります。
田中宗さん
- 量子アニーリングが流行っている
- D-Wave 世界初の商用量子マシン
- 組合せ最適化問題
- 量子アニーリングが得意とする
- あらゆる産業界において非常に一般的な問題
- 量子アニーリングは、物理学と情報処理の融合
- 1998年にかどわきさん、にしもりさんが理論を提供
- 2011年にD-Wave → 注目度が上がっている
- 今日は歴史的な話から現在、将来的な展望まで
- 「活用する」事が大事
- ハードはすでにある
- この場で、量子アニーリングをどう使えるか発見して欲しい
Robert H. (Bo) Ewaldさん
- リクルートさんとは縁がある
- ムーアの法則は終わると言われている
- 「ムーアの法則の死を予測する人が年々倍になる」
- Richard Feynman
- 1982 量子力学を使ってコンピュータを
- 量子力学に抗うのではなく、活かす
- 今はビットの世界。分かれている
- 量子力学
- ビットの重ねあわせ
- 量子のもつれ
- バリアをエネルギーで超えるのではなく、トンネルを抜ける(低エネルギー)
- David Deutsch
- 量子チューリングマシン
- Peter Shor : 量子暗号
- 量子の世界
- 量子通信、量子鍵配信
- Gate Model
- 金属のアニーリング、と同じことをやる
- 焼きなまし
- 物理学のphdの人たちのベンチャーから
- コンピュータを作ろうとした
- エンジニア採用も始めた
- 今までのコンピュータと違う
- ハミルトニアン形式で問題を記述する
- 確率論的に、エネルギーが一番低いところを、何万回も探す
- 最初のものはLockheed Martin, Google, Los Alamos National Labの三社が購入
- GoogleはMLに使おうとしている
- 1000qubits → \(2^1000\) のうちから候補をみつけてる
- 命令が1つ
- 消費電力がほとんどない。冷蔵に使う
- コンパイラも何もない時代といえる。ソフトウェアをこれから作る
Murray Thomさん
- 3部屋ある。3m四方。チップが1つある
- ラックで環境を作っている。
- ネット経由で制御する端末
- 18層のシールドで隔てている
- 15mK以下まで冷やす
- 配線はすべて抵抗がないもの(熱が出てしまう)
- 1000個の量子ビットが乗ったチップ
- 回路の作り方は似ている。超電導性があるのが違い
- 今までのコンピュータはトランジスタ
- 時計回りの電流と逆周りの電流→吸引と反発
- 8個のqubitが格子に入る
- 2値の最適化に使う
- 量子アニーリングは古典コンピュータ経由で使う
- QMI : 量子コンピュータのための命令。
- C, C++, MATLAB, Pythonなどのライブラリ
- 開発環境を作ろうとしている
- 大きな問題は分割して解く
- 物理現象を使って問題を解く
- 最小化をする。qubitの相関をプログラムする
- 例えばリスクをあわせるときは両方同時に1にならないようにする
- 4,512パラメータある。解を100なり10000なり受け取る
- 例: 色分け問題
- qubitに色を割当てる。1つだけが1になるように重み付けする
- 2つのビットで1つの論理ビットとする
- リージョン間の調停、コピー
- 問題が大きくなると、分割統治で。
- 制約充足問題の表示を、C言語よりもコンパクトに書ける言語を設計
- 例: 巡回セールスマン問題
- qubitに区間を当てはめる方法
- 次の改善で15都市
- Parallel Update 100の都市
- ベンチマーク
- 11,000倍の違い
- データサイズが大きくなっても、遅くならない
- 車の識別
- 識別率が84%から94%
- CPUサイクルを減らせた
- 古典の方法より1億倍速いという結果も
- D Waveは量子コンピュータをムーアの法則的にqubitを増やせた
質疑応答
- Q. D-Waveは最適化問題に関する問題が得意?グラフ理論に関わるもの?他?
- A. 例を上げたのは最適化問題。最小値を見つける設計だが、機械学習で使える
- Q. 生物分野への適用は?
- A. 生物学は情報の宝庫。パターン認識でがんの発見の研究
- Q. 商用だそうですが、おいくら
- A. $15,000,000。リースはある。
- Q. 失敗した時にはどうなる?2色で分けるとか
- A. NP困難問題の場合。4色で塗れることは証明されてる。ペナルティ(塗り分けられてない)が少ない答えを返す
- Q. 金融機関は量子アニーリングに興味がある?
- A. 関心はありそう。投資はしてもらっている。quontum for quontsというサイトが有る
- ブタペストでそのような会議があった
- Q. 基礎研究にどのようなフィードバックを? (かどわきさんご本人)
- A. 物理力学的コンピュータをどう活用できるのか。理論的にシステムがスケールアップした時の挙動。ノイズとか。
- 論文を出している。直接貢献している。IRPAで新しいプロジェクトで科学的な観点を探している
- Q. 量子コンピュータがスマホのように使われることはあるのか
- A. 絶対零度で動くので今は難しい。より高い温度で動いたりするようになれば。クラウドで使えるようになる
- Q. プログラムのサイズと緩和時間は関係あるのか。どうすればコントロールできるのか
- A. 量子状態が失われても、問題がない設計にしている
- Q. 巡回セールスマン問題のアルゴリズムの
- A. 色分けの場合は制約を入れた。巡回セールスマン問題では辺が2つ以上立たない制約。ある種のサイズまでは自動的にできる
- Q. 素因数問題を最小値問題に置き換えた時の注目度
- A. 章のアルゴリズムは有名なのでよく聞かれる。このマシンでの素因数分解はできる。3万2千までは。市場も限られるので
- Q. プログラミング言語を作る気がある?
- A. OSなどがあるわけではない。SDKを作ってくれているサードパーティーもある。コンパイル技術が出てくるのを望む。
- A. コンピュータが出てからfortrunまで結構時間かかった。バーチャルメモリのようなものも作って入る。使い方をもっといろんな人に考えて欲しい
- Q. 将来の予測するのは得意ではない?
- A. 得意である
- Q. 量子力学が使えなくも便利に使える?
- A. はい。充足性問題の小さいものであれば。ハード的には古典的なソルバでは見つかれられない解を見つけそう
- A. 専用の言語を使うと簡単にかける利点も
- Q. グローバルな解を返せる?
- A. 返せる。保証はない。高い正確性のものが上がる。量子コンピュータは続きを実行するのは苦手
- Q. 巡回セールスマン問題で分割することで扱える都市が増える?
- A. 8qubitsをまとめて分割。分割し過ぎると全体の解に貢献しなかったり。10000変数を1000できるのがいいのか2000がいいのかを判断するのは難しい
- Q. 気楽にコンタクトを取れますか?
- A. ぜひ聞いて下さい。今までのコンピュータを置き換えるものではなく、一緒に使う。細かい部分は古典コンピュータのほうが得意かもしれない
Quantum Annealing for Feature Selection / 棚橋耕太郎さん
- 特徴量選択 → 特定の特徴のみ選択
- ビジネスに重要な特徴の抽出
- コンピュータリソースの節約
- L1 regularized logistic regression
- 線形のみしか扱えなし
- L0ノルムを使った方法を考えた
- L0ノルム→0ではないものの個数
- L0ノルムの最小化は最適化問題になるので難しい
- アンサンブルしてる。使う学習機を選ぶ
- 弱学習機は非線形なデータにも有効
- 学習誤差と学習機の数を最小化
- D-Waveはないので、Quantum Monte Carlo
- QAFS → 精度がいい。特徴量の数が寄っている(自動で決まる)
今日は 数学カフェ の日です
Posted on September 27, 2015
Tweet
数学カフェ に来ていますので、メモを残しておきます。
- 就職しても数学を学びたい、これからを就職する学生さん、数学好きな女性を増やしたい
- 今日はデータサイエンスの数学的な部分をきちんとやりたい
@pseudo_finite さん「データ分析における数理最適化」 - 前半
- 学生時代は数理論理学やってた
- \(N + Z\) もペアノの公理を満たす(前の数取れるので)
- 「データサイエンティスト」ではなく「研究員」
- データ分析
- wikipedia : データを用いて分析
- ビジネス : 意思決定・施策
- 現象を知る、施策を打つ
- データの元となる現象を解明
- データ分析の結果を誰が使うか
- 経営 : モニタリング・ざっくりした結果
- 現場 : アナリスト的
- システム : プログラマ寄り・機械に落とし込む
- 現象・施策のバランス == ビジネスインパクト
- 「日経平均と強い相関」コントロールできない、施策が打てない
- レコメンデーション
- Conversion UP、(顧客|店舗)満足度UP
- 例: ホテル、本、ニュース、不動産、異性、広告、SNSの友達
- 商品を個人へ? クラスタリング?
- レコメンデーション戦略
- データ: 顧客・商品・属性、履歴、事前知識
- シーン : タイミング、個数
- 技術
- 協調フィルタリング、LR、SVM、隠れ状態系(NMF、pLSA、LDA)、数理最適化、RF-確率表
- 隠れ状態系はあまり現場で使われてない
- スコアのテーブルを作るのが目標
- RF-確率表
- タスク例 : 10週間のログから、顧客が閲覧する物件を予測 (TOP N レコメンド)
- 分析の流れ
- データクレンジング
- BOT(はずれ値)、0/1 のカラムに日本語が入ってる(QUERY STRINGを生で突っ込んでるとか)
- 苦行。ロジック実装後にクレンジングすることもよくある
- 可視化・基礎集計 (分析の方針を決定する)
- 分析用DBを作成
- 特徴量を洗い出したり
- データクレンジング
- 可視化
- 人間が理解しやすい形に
- 1万ユーザくらいテキストファイルにして見る。通勤電車で1,000ユーザくらいずつ
- RF-確率表 : RecencyとFrequencyで確率を出す
- 実績値を確率とする?
- 単調性制約 : Recencyが小さい、Frequencyが大きいほど閲覧、という仮定
- 実績値は単調性制約を満たさない (オーバーフィッティング)
- 確率表を推定する!
- 確率表の推定
- 単調性制約を満たす
- データ件数が多いセルの閲覧確率は信頼
- \(p_{ij}\) 実績。 \(x_{ij}\) 推定。
- 単調性制約を入れる
- 数理最適化問題として、ソルバーで解く
- RF-確率表のまとめ
- 実装が簡単
- チューニングがいらない (ノンパラメトリック)
- 運用が現実的
- Q. 小数データというのは、個々人で再現してデータが少ないから?
- A. この案件は大規模だから気にしなくていい。小規模な応用とか、商品の違いとかでデータが減る
- Q. Recencyとか冪分布になりそう。
- A. 対数分布になりそうだけどやってない。ECサイトによって減衰が違うはず。関数形を仮定しなくていい
- Q. ロングテールが問題になりそうだけど?
- A. 気にしてない。時計とかだとなりそう。不動産だと1 conversionで終わりとか。
- Q. binの切り方を工夫した方がいいのでは?
- A. 課題はあるのか優先順位は低い。FとRをどうとるか。
- Q. 一定数溜まったbinのみを使うとかしない?
- A. 議論はあった。1次元は簡単。2次元だと・・・。簡単さを求めているが、将来はやりたい
- 制約付きレコメンデーション
- TOP Nではなく、バランスを考慮したリコメンドが必要
- 1つの商品ではなくいろんな商品を売りたい
- 売れ行き悪い商品の援護
- 過剰レコメンドの抑制(店舗の課金を加味。いいホテルは勝手に売れる)
- 顧客のリピート率、顧客育成
- 例えば、各商品の期待利得を1000円以上とか
- \(x_{ui}\) user×itemの割り当てテーブル、\(e_{ui}\) CV期待値
- 商品数\(\sum{x_{ui}}\) や 期待コンバージョン数 \(\sum{x_{ui}e_{ui}}\) に制約
- 素直なモデルの問題
- CV数が現実的ではなく解がない
- 変数のオーダーが10,000オーダーでソルバが厳しい
- 100顧客×100商品・・・
- レコメンド可能商品を絞ると1,000顧客にはできるけど・・・
- \(p_i\) を追加。CV目標の違反量。これを重みづけして混ぜて最適化
- 連続変数が入るので問題は難しくなっている
- 列生成法とラグランジュ緩和法を組み合わせる
- 10,000顧客まで解けるように
- Oracle, Primal*, QUERY を反復する
- \(P\) パターン集合、 \(g_{uip}\) CV期待値
- ラグランジュ乗数でCV目標制約を制御
- ラグランジュ緩和問題が下界を与える
- item×userから、userごとの制約に書き換えられる
- 反復回数は10回、40~50回
CM「数理女子」
数理女子。女性が数学を勉強するための障壁をなくしたい。数学を使っている女性で記事などを執筆してくれる方募集。
「都内数学科学習連合にも女性居ますよ」
@pseudo_finite さん「データ分析における数理最適化」 - 後半
- 雑談 : 研究者が社会に出るときに知っておくとすっきりすること
- 研究者
- 正しいことを好む
- すべての事実を話す
- 面白い研究テーマを好む
- 挑戦的な問題を好む
- 論文を書く
- 実務家
- ベストな選択を選ぶ
- 必要な事実を話す
- 顧客が好むサービスを好む
- リスクのある仕事を嫌う
- 売上を出す
- 研究者
- 文書要約
- google検索の結果(スニペット文)、国語試験の要約、書き込みの要約、ニュースサイトのトピック、論文サーベイ、あらすじ、アブスト、新幹線車内電光掲示板
- 「夢」よりも「シビア」
- ジャンル、カテゴリ、著者で手法が分かれる
- 記者が書いたものは、だいたいヘッドラインが要約として抽出される
- ルール: 字数制限 or 要約率
- 要約はなぜ必要? : 時間がない。要約にはスキルが必要
- Twitterのキーワード検索による1000ツイートを要約
- 動機: ニュースをざっくり知る、キーワードの観測
- 多数派の意見を冗長性なく
- データクレンジング
- 日本語は形態素解析が必要なので難しい
- 日本語の活用
- RTなど
- 単語文書行列 : 文書×語彙の頻度
- TF(Term Frequency) * IDF(Inverse Document Frequency)
- IDFは単語の出現数の逆数をlogをとったもの(多くの文書に現れる単語は特徴的でない)
- 要約にドキュメントを含めるか\(x_d\) 要約に語が選択されているか\(y_w\)
- 面積を最大化する
- tfidf値を利用する
- 文字数は制約式。 \(y_w\) の選定も制約式で行う
- 実際に分析した例:
- 素数 : 素数を数えて落ち着くんだ系
- フォルクスワーゲン、鬼怒川 : ニュースのヘッドラインなど
- レビューの文書要約とかは商品買うのにいいかも
- 良い数理モデリング
- データの特徴を捉えている
- 定式化とアルゴリズムがタスクにハマっている
- 「センスが必要」。基本が大事。
- Q. 文書要約で数理最適化を使うのはよくある手法?
- A. はい。研究されている方も
- Q. Oracle の変形で \(p_i\) が \(0\) になる理由は?
- A. 制約が入ってないから
- Q. 反復の計算量のスケールは?
- A. マシンスペックはノートPC(メモリ4GB程度)
- A. 反復6回で1日以上かかってる。序盤のイテレーションは数時間
- Q. Oracleの問題を速く解くように設定する?
- A. Oracleは問題規模が小さくなってるから余裕。Primal*が規模が大きい
- Q. 数理モデルのセンスの身に着け方は?
- A. データをよく見る。実装。入力データをぶらす。
- A. 数理計画の立場から見ると、正規分布で済ます、のが違和感がある
- A. 常にモデリングを心がける。土地勘を身に着けるためにまずいろいろ知る
- Q. モデルがあっているかの検証はどうしている?
- A. 正解データを用意している。SVMやロジスティック回帰と比較はしてる。PR、F値で見る。min avg precision。本当に単調現象なのかとかを統計的に検定したいがやってない
- A. 元々統計畑ではないので。
その後、ソーシャルに書けない大人の話をもろもろ。
@simizut22 さん「代数トポロジー入門」
- 世界に代数トポロジーの光を
- 学部レベルの内容
- 曲面のMorse理論。cell複体のhomology
- やらないとこ「多様体、一般ホモロジー、離散Morse,、単体的、層」
- 臨界点、退化と非退化(2次導関数が0かどうか)
- 2変数関数では∇=0
- 退化については Hesse行列が生息か否か
- \(xy\) と \(x^2 - y^2\) は座標変換で移りあう
- Morseの捕題
- 非退化臨界点の周りでは\(x^2+y^2\) \(x^2-y^2\) \(-x^2-y^2\)のいずれかでかける
- 非退化臨界点の指数 → 0, 1, 2 (Morseの捕題の局所座標表示によるマイナス係数の個数)
- 今日は2次元閉多様体の話
- 局面上の関数の臨界点・退化性は局所座標で (局所座標の取り方によらない)
- Morse関数 : \(f : M \to R\) がMorse関数 def 全ての臨界点が非退化
- 閉曲面上の Morse関数の臨界点は高々有限
- Mがコンパクトなのでfは最大・最小値をとる
- \(S^2\)上の高さ関数 \(h(x, y, z) = z\) Morse関数
- 閉曲面M上に臨界点が2つだけのMorse関数が存在すれば、Mは球面と微分同相
- 7次元以上だと微分同相とは限らない
- 曲面のハンドル分解
- 閉曲面上のMorse関数 \(M_t\) 下の部分、 \(L_t\) 等高線を定義
- Morse関数は閉曲面上の高さ関数と見れる
- gradient like vector field
- \(c_0 \in R\) が fの臨界値
- \(M_b ~= M_c\) 微分同相
- 臨界値の前後の様子だけみればいい \(M_{[c - \epsilon, c + \epsilon]}\)
- 指数によって \(D^2\) が増えたり減ったりする
- 指数1の時に臨界点前後で向きが変わる
- [0-2]handle
- 臨界点を通るたびにhandleが付け代わる
- 丙局面は有限個のhandleの和で表せる
- セル複体
- \(e^i\) オープンとクローズなディスク(バーの有無)
- 0-dim 有限点
- \(h_i\) 接着写像 \(e^i\) の境界からYへの写像。をつかって帰納的に
- ハンドル体とセル複体は似てる
- homotopy同値とは
- \(S^1 ~ R^2\) は 一点とhomotopy同値ではない
- ハンドルとセルは1-1対応する
- homotopy不変量についてはハンドル分解を用いて計算をしても問題ない
- Q. 次回までに何をやればいい?
- A. 多面体を三角形分解とかセル分解したり?
- Q. Morse関数の臨界点は有限ってのは病的な例は大丈夫?
- A. compactなら大丈夫では?
- Q. 退化と非退化は曲率?
- A. metric入ってないので
今日は「Event for Diverse Game Engineers」の日です
Posted on September 20, 2015
Tweet
Event for Diverse Game Engineers に参加しています。 有料イベントですが全トークソーシャルO.K.のようなので、自分用のメモを残しておきます。 ハッシュタグは #TokyoEDGE2015 です。
@4_mio_11 さん 「思い描いてるものを形にするための事前準備」
- 注意事項など
- スクエニ本社に行きたい、大きい勉強会、そこで話したい
- 東京旅行のついでに @tsuchidasama さんにあって勉強会開こうと思った
- 80人くらいかと思ったら170人超え
- 「行動あるのみ」
- @tsuchidasama さんにFBで申請した
- 自分の環境を変化させてみよう
- 本物のゲーム開発者に触れるといいでしょう
@DADA246 さん 「shared_ptrとゲームプログラミングでのメモリ管理」
- 眠くなる話で眠らせていく予定
- OSは動いていること前提。C++ネイティブ。アクションゲームなどリアルタイム性。中規模~(50人以上)
- ゲームプログラム
- FPSが安定
- (メモリの観点で)スワップアウトが発生しない
- 実行時のメモリが物理メモリサイズに収まる
- メモリ固定管理: ゲーム中はOSからメモリをもらわない
- 動的管理: 必要になったらメモリを返却する
- 今回は後者
- 近年データ量が増えている。データドリブンである必要
- メモリを動的管理にすることで制限が減る
- 多彩なデータを扱えると、デザイナやアーティストが思いついたアイデアを試行錯誤できる
- 「一時的にメモリを使用するデータ」のtry and errorが可能に!
- ゲームシーケンス: シーンによってメモリの利用方法が変わる
- 動的管理の問題
- リーク、断片化、処理速度
- これらを嫌って固定管理するプログラマも多い
- std::free、deleteを忘れるとリークする
- メモリの開放を他のプログラマに委ねる場合に起きる
Register
とUnRegister
など
- メモリの開放を他のプログラマに委ねる場合に起きる
- RAII (Resource Acquisition Is Initialization)
- オブジェクトとリソースの生存時間をそろえる
- 実装例: shared_ptr
new
とdelete
を使わない- モジュールごとに shared_ptr で分離される
- 生ポインタは動作速度が必要なときのみ
- コンストラクタで初期化できるようにする
- C++ の閉じかっこの強さを利用する
- std::mallocを使う必要がある場合 => バイナリデータ読み込み
- std::freeの書き忘れが起きる
- リーク検出ツールで検出 → 簡単に作れるよ!
- 今時のOSはアロケータを差し替えられる
- 例: win の
_cdecl operator new
- ここでデバグ情報を保存する
- 例: win の
- リークしているアドレスは生存期間が長い
- アドレスに日付を付ける
- 常駐データなど、解放しないものもある
- コールスタックも保存。1回のみのモノは常駐データ
- winの場合は
RtlCaptureStackBackTrace
- 「同一のコールスタックから生存時間の長いメモリを複数回確保」をメモリリークとして検出
- ログの分析はC#など使っている(C++ではちょっと)
- jenkinsにまとめるといいでしょう
- 断片化: 連続したメモリが確保できない状態
- メモリは空いてるのに確保に失敗
- MMU(memory management unit)の有無で変わる(ふつうのPCならあるけど、ないマシンも多い)
- ハードウェア構成によって断片化のしやすさ代わる
- ハードによって戦略が変わる
- MMU非搭載
- 物理アドレス空間の断片化に要注意
- 物理メモリ16MBなどの組込。固定管理の方が適してる
- MMU搭載 (幸せなプログラミングができる。運がいい)
- 仮想メモリ空間の大きさを当てにして、何もしない
- ゲームは、物理メモリ量に収まるサイズのアプリになるはずなので
- 64bit Win8.1 : 128TB。ページ単位のブロックアロケータ。断片化気にしない
- トラブったら設計がまずいはず
- Blackhat 2010 Understanding the Low Fragmentaton Heap
- MMU搭載で仮想アドレスと実メモリに差が少ない場合
- 例: 32bit Windows XP で 2GByteのゲーム
- 断片化にかなり注意が必要
- 生存時間の長いメモリを減らす
- 生存時間の違うメモリのアドレスを、離す
- 生存時間の長いメモリを減らすには
- 相互参照を減らして、速やかに開放できるようにする
- 長時間駆動に耐えやすい
- 依存関係が増えやすいときは
weak_ptr
- シーケンス切り替え時にモジュールを捨てる。状態データのみ抽出して引き継ぐ
- シーケンスデータ移行モジュールを作ることも
- シングルトン、グローバルインスタンスは極力使わない
- グローバルインスタンスを先頭にとる。断片化が起きない
- 生存時間の違うアドレスを分ける
- アロケータを複数 or Double Ended Stack allocator (上からか下からか選べるアロケータ)
- VRAM : 断片化する
- メインメモリよりは気楽にとらえることも
- アドレスをプログラム側に渡してない
- いざとなったらメモリコンパクションを実装
- メインメモリでは厳しいよね
- 動的確保に見合った処理速度にするしかない
- 教科書通りの高速化は実施 (User-landで実施するアロケータ作るとか)
- User-landとKernel-landの切り替えは時間がかかる
- 生産性とのバランスの問題
- 速度か開発の柔軟性
- 処理の高速性が求められるところのみ頑張ればO.K.では
- リークツールは3日か4日あれば組める程度でしょう
- メモリが不足したらどうする?
- 不足しないようにゲームを作る
- 自動テスト・エージングでメモリ使用量を必ず把握する
- 断片化・リークを直してもダメなら、データ側を修正しなければならない
- 開発用ROMではたくさんメモリ使えるからデザイナさんが頑張っちゃったりするけど
- 動的管理によるいいこと
- 多彩なデータを動作させることが可能に
- デザイナ、アーティストのクリエイティブてぃを引き出す! 面白いゲームを!
- Q. ユニークポインタを使わずに shared_ptr がメイン?
- A. new, delete は使わずにスマートポインタを使おう
@aizen76 さん 「UE4とUnreal C++でのプログラミング環境について」
- Unreal Engine 4
- 2015年 無料化が発表された
- 3Dでも2Dでも
- ドラクエ11のPS4版
- デスノートのリュークのCGも
- アニメ会社とかでも注目度が高い
- ブループリント(ビジュアルなスクリプトシステム)を使うのがオススメ
- 「ボクが作るならはC++のコード一行もかきません」
- C++を使う理由
- パフォーマンスの追及(速さは十分だけど、数十~数百倍の差が出ることも)
- エンジン・エディタを拡張したい (ほとんどの部分が公開されていて拡張可能)
- pull-reqしたりできるよ
- 外部ライブラリやSDKの使用 (OpenCVとか)
- 独自デバイスの利用 (KINECTとか)
- C++の勉強!
- “Unreal C++ is Awesome!” 自画自賛
- 初心者向けC++。独自拡張。Unreal Editorとの親和性
- C#やJSの特徴も
- Unreal BuildTool → Mono C# → VisualStudio OR Xcode
- UnrealBuild Tool
- C++のメタ情報
- Mono C#
- クロスプラットフォームを意識したモジュールの管理・リンク
- Windows, Macで動く。Linuxでも実は動く
- 比較的モダンC++
- Range based forに対応
- ムーブセマンティクス (右辺値参照)
- コンテナのアルゴリズムにラムダ式
- auto, enum
- ただし、対応してないコンパイラがある機能には慎重 (マルチプラットフォームなので)
- テンプレートとか難解な部分はなるべく使わない
- コーディングルールが決まっている
- C#の標準にかなり近い
- C++の標準よりこちらを
- 「中かっこ論争は醜い」
- 誰が書いたかわからないくらい普通のルール
- STLは使わない。ゲーム用に特化したいいライブラリがあるので
- boostとか無理やり使うと苦しくなる
- C++標準より圧倒的にコンテナ多い。50種類くらいある
- TArray, TSet, TMap (std::unordered_* とか書かなくていい)
- FString (std::stringベースだがほぼ別物), FText (言語切り替えに対応), FName (静的文字列。速い。アセットの名前などに)
- ネットワーク周りのエンディアンとかにも対応
- C#ライクなデリゲート。ダイナミックデリゲート(特殊。シリアライズ可能)
- Unreal Editorが自動でコード生成
- .cppと.hも個別に作らない
- wizardみたいな感じで
- GCあり。UnrealObject (UObject) を継承していれば
- GC最適化可能 (呼び出し感覚、強制GC、並列化、オブジェクトプールなど)
- メモリの可視化
- UObjectじゃないものはスマートポインタ
- TSharedPtr, TSharedRef, TWeakPtr
- ゲームで使用する前提の設計
- スレッドセーフじゃなく、標準スマートポインタより早い
- TThreadSafeSharedPtr (ロックフリーアルゴリズム)
- コピー時にメモリ割り当てしない
- 例外使わない
- C++にメタ情報はない
- RTTI(実行時型情報)はある
- Unreal Header Tool にて実現
- UCLASS, UPROPERTY, UFUNCTION, USTRICT のようなアノテーション
- reflectionだけでなく、様々な情報を追加可能
- ブループリントとの連携に利用 (BlueprintReadWrite, BlueprintCallable)
- ホットリロード
- ゲーム実行中にC++コードを書き換えることができる
- 部分的にDLLをリロードできる (Mono C# がやってる)
- ホットリロードのデモ
- C++コード(Actor)を追加
- ヘッダを書き換えるとビルドが遅くなるので、try and error はヘッダを書き換えない方が
- ゲーム実行中にマネキンを設置、C++コードを書く、ビルドすると回転を始める
- さらにC++を書いてビルド → 失敗。エラー箇所にジャンプできる
- さらにC++を書いてビルド → 失敗。ライブデバグ
- 「何度も成功してたのですが、やはり生は怖いですね」
- プロパティはblue print 上から見えるようになる
- 「ログのLがlに!」 → コンソールにライフの表示を成功
- コンソールへクラス名を吐く (リフレクションの例)
- 再起動。Visual Studioとの接続を切断
- Unreal Engineでソースコードをエディットする (VCのインストールはいるけど、立ち上げなくていい)
- VCは重いから。ただしエディタはしょぼい
- blue printからVCで該当行にジャンプとか
- Unreal C++ は素晴らしい。ただし、ブループリントで十分にゲームを作れる
- Unreal Fest 2015 横浜というイベントがあるよ (1000人まで)
- UE4 GameJamというイベントを関西でやるよ (20人まで)
- Q. コーディング規約をサポートするツールはあるの?
- A. ツールはなさそう。レビューで直しているようだ。ルールで書けないところもあるので難しい
- Q. Unreal C++でラムダ式は使える?
- A. はい。VC++で使える機能なら
- Q. コンパイル速度はマシン性能による?
- A. VCのコンパイラ速度に依存。モジュール単位でビルドしてるので普通より速いはず
- Q. 今のはでもマシンの性能のせい?
- A. はい。普通は5秒。ハイスペックマシンを使って
- Q. コンパイル速度を速くするツールとかノウハウを
- A. すでにやられている。我々ができることはほとんどない
- Q. 分散ビルドは?
- A. 公式にサポートされてるので、使っても
- Q. C++14への対応は?
- A. 少しずつ増えている。VC++やXCodeが対応されていれば
- Q. コンパイラの選択はできる? clangとか
- A. 去年の12月に出てきている。問題はまだある。そのうちはいるはず
@shw95349 さん 「元コンシューマ系PGがアケゲ開発やってみた ~アケゲ開発でのC++~」
- 男の煩悩担当みたいなコンシュマーゲーム開発
- 4vs4オンライン協力対戦アーケードゲーム
- PS3, XBOX360, Wii, Vita, 3DSの時代のコンシュマー
- プラットフォーム複数なのでコンパイラも複数
- C++ベースでビルドが通るように。方言は禁止
- STL, Boostの使用制限 → レガシーなコーディング
- 最近のアーケードゲーム開発
- PCゲームの開発のようなもの
- 筐体の中にPCが入ってる、ようなもの
- OS: Win, CPU: Intel Core i3, GPU: NVIDIA GeForce
- コンパイラを選べる。外部ライブラリやミドルウェアの使用。ハードウェアの自由な設計
- アーケード、コンシューマーとモバイルの比較
- 言語は変わらない
- アーケードの場合、店舗(オペレータ)もお客様
- アーケードの場合、デバイスが自由度
- アーケードは風営法など、地域の法律への考慮が必要
- 作ったゲーム
- 30fps, 1280x1080をアップスケーリングして1080p
- グラフィックはオーソドックス
- エフェクトの社内制ツールやADX2(サウンド)
- ネットワーク周りは大変。ゲームデータ管理からパッチ、Wifi周りまで
- C++がメイン。ツールはC#。DBサーバはJava
- STLを多用。VS2012のためC++11機能が一部使える
- 足りない部分は Boost
- 典型的なOOP、MVC。(
- クラス図は複雑: 出力しようと思ったら1日かかっても出力できなかった)
- C++11の嬉しい機能
- ラムダ式 : STLと相性が多い。コールバック定義場所が近くに。boost::bindの緩和。式がでかいと見にくい
- 型推論 auto と decltype
- 無駄なtypedefの駆逐。その場でしか書かないやつとか
auto&&
Reference Collapsing の挙動を知らないとハマる
- range-based for
- std::tuple 構造体定義を少なく
- ただしtupleの構造を変えるとstd::get, std::tieの調整が大変
- std::array : 全要素比較が楽だったり
- Scoped Enumeration : 名前衝突の危険性を低減。ラッパーなどあった方が
- std::atomic : 通信同期に使ったり
- std::future, std::promise : 非同期処理に (問題になったけど)
- static_assert : バグの芽を摘む
- final, override : コンパイル時にエラー見つける
- Boost.Property_tree : XML便利
- Boost.Preprocessor : 便利マクロ群
- C++は進化してもバグは尽きない
- オブジェクト・エフェクトを大量に出すとクラッシュ → プールしてメモリを節約
- オブジェクト大量にあるときのコンテナへのアクセスコスト
- std::list を std::vectorへ
- 固定長のモノは reserve や std::array へ切り替え
- push_*** を emplace_***
- アルゴリズムを見直し
- std::thread, std::future, std::promiseのリーク
- VS2012のバグだったのでBoostへ
- CI(Jenkins)、Coverity などで問題を炙り出す → 割と平和にリリース
- アーケードゲームで違ったこと
- テストモード
- 筐体が場所を取る。キーチップなど
- 作成基準が会社独自
- KPIの分析はモバゲーに近い
- データのバックアップ・復元処理
- アーケードは初回起動に時間かかっても問題ない
- ソフトウェア面ではコンシューマ開発と変わらない
- コンテンツそのもの以外に現場体験重視
- ゲーセン来てね!
@hotwatermorning さん 「JUCEで作るオーディオアプリケーション」
- bitbucket にサンプルコード上がってるよ
- JUCEライブラリ
- Traktionの内部用で開発
- 商用ライセンスあり(12万円)
- DAW : オーディオ政策に使う統合制作環境
- オーディオプラグイン。音をゆがませたりするやつ
- デモ: 音楽を流しながら続行w
- 色んなオーディオアプリケーション開発企業で利用されている
- モダンなC++で書かれている
- オーディオ、GUI関連、Network、暗号化、スレッド
- exampleのJuceDemoを見るといいよ
- オーディオプラグインの規格
- VST, Audio Unit, AAX, RTAS
- ゲームエンジンではない
- 信号処理に特化してない。最低限
- 特定のモジュールだけを使うのは難しい。がっつり使う
- JUCEはIntrojucerを利用して開発
- CMake的なもの。マルチプラットフォーム
- 簡易なコード生成機能も
- 日本語には対応してない
- テンプレはあるので書きたいとこから書ける
@tsuchidasama さん 「プログラマの生存戦略 ~生き残る為に出世しろ~」
- 21歳で独立してバブル崩壊して死んだり
- 講演してる: CEDEC, GDC, 学会・大学
- 専門学校では「いいから量をやれ」遊びまくってるから
- 大学では「専門武器を持て」企業が見たい
- ゲーム業界の人には「生き残るために出世しろ」
- 出世とは?
- 上司に気に入られる → 上司が変わる。消える。上司が部下に。無駄
- 社内の役職 → 部署がなくなる。会社が合併。会社がなくなる。無駄
- 生き残るための出世とは?
- 世に出る
- 世間に力を認知してもらう
- 心得1. 自分の担当個所を商品の売りに
- どんな仕事でもやる
- 今までの経験を生かす
- 心得2. OOと言えばXXさん
- ニッチを狙う
- 新分野を作る
- 心得3. 対外活動に出る
- 自分の広報担当者は自分
- 場所がなければ自分で作る
- 世に出ると
- 会社がつぶれても関係ない
- 主従の逆転 「俺様が会社に居てやってる」
- 精神衛生にいい : 給料が下がってもどうせすぐやめれるし、みたいな
- 能力のインフレを目の当たりにする → 会社の中に居てはわからない
- 社内政治とかどうでもよくなる
- オチ「勤続20年にして未だ平社員」
…or you can find more in the archives.