---
# System prepended metadata

title: SourceCredのFibration modelについて

---

# SourceCredのFibration modelについて

#### **修正点**
- αは重みとして使うと思っていたが、CredRankではαは「シード確率」となっているので、重みを作る確率？のようなので、αは0~1になる。今の説明上は問題ない

## Fibration
ファイブレーションの定義はたくさんある。
共通するところはホモトピーリフト特性を満たすこと。

> 古典的なホモトピー理論では、ファイブレーション$p：E→B$は、特定の揚力特性を持つ位相空間間の連続関数です。最も基本的な特性は、点e ∈ Eとp（e）で始まるBのパス[0,1]→Bが与えられると、パスをeで始まるEのパスに持ち上げることができるということです。(https://ncatlab.org/nlab/show/fibration のgoogle翻訳)

上記で述べている「特定の揚力特性」をホモトピーリフト特性と呼ぶ。

$p:E→B$
$p':E'→B'$ 
に対して$p→p'$へのファイバーを持つ写像がファイブレーション。
$p→p'$に連続するように定式化することがファイブレーションで求められること。

### ホモトピーとは

> 数学におけるホモトピー (homotopy)とは、点や線や面などの幾何学的対象、あるいはそれらの間の連続写像が連続的に移りあうということを定式化した位相幾何学における概念のひとつである。(Wikipediaより)

つまり、ある状態からある状態への遷移があるときに、どうやって繋がってるかを定式化すること。

## ファイバーとは
> $x∈B$に対し、$F_x = π^{−1}(x)$をx上のファイバー (fibre, fiber) という。

同じ連続する状態をファイバーと呼び、ファイブレーションでは接続する関数を求める.

# SourceCredの貢献グラフ
前提として、この時点のグラフには重みと遷移確率が混在する。

## 従来の貢献グラフ
時間が関係していない。
重み(α)や遷移確率(β)を変えたとき、新しく設定した値で全てのノードとエッジを用いて再計算される。

![従来の貢献グラフ (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102646/458885d8-ae15-4832-efd4-f8e00a1326de.jpeg "従来の貢献グラフ (2).jpg")


## Fibration modelの貢献グラフ

### 最初の週
![Fibration modelの貢献グラフ_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102646/5c8fe6ce-7f3e-bfbf-37cf-09739eb5dfb7.jpeg "Fibration modelの貢献グラフ_1.jpg")

Epochノードを作ってあるが、この時点では時間の遷移がないので結果は従来と変わらないはず。

### ２週目

![Fibration modelの貢献グラフ_2 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102646/466869e4-50ab-e8a3-72a3-8c83b9c0ef72.jpeg "Fibration modelの貢献グラフ_2 (2).jpg")

現在は1週間ごとにEpochノードを生成する。

先週のEpochと今週のEpochを遷移レートγで接続。

先週のEpochノードからγ_forwardをパラメータとして今週のEpochに重みを加算か減算するはず。
今週のEpochノードからγ_backwardをパラメータとして先週のEpochに重みを加算か減算するはず。

γはFibrationのcontinuous functionによる。
FIbrationには何種類かある。
全ての過去の期間を現在の期間に影響させるか、一つ前の過去の期間を現在の期間に影響させるか。
ドキュメントでは先週からのみエッジが接続されていたのでその方法を使うと思う。

期間ごとの重み（SourceCredでは貢献度に強く関係する)は週ごとにEpochノードとして保存されるはず。
過去にPR_αが1で、最近PRの価値が高くなってPR_αを2にした場合、過去のPRを高く再評価したい場合、γ_forwardを高くすることで過去の価値を現在の価値に追加して調整ができるはず。その場合、活動ごとにEpochノードを用意する必要があるか、活動ごとにαとβを保存しておく必要があるはず。そこまでは言及されていないので今後の実装次第。

βの値は、現在の価値より重視するなら過去のEpochのβを低くすれば調整できる。

### 疑問
- γを先週からの分からのみ更新するなら勾配降下法に近い気がする

## 参考

SourceCred: an introduction to calculating cred and grain
https://research.protocol.ai/blog/2020/sourcecred-an-introduction-to-calculating-cred-and-grain/

https://en.wikipedia.org/wiki/Fibration
https://ncatlab.org/nlab/show/fibration

リンク切れしてる？
http://pantodon.shinshu-u.ac.jp/topology/literature/principal_fibration.html
https://ja.wikipedia.org/wiki/%E3%83%9B%E3%83%A2%E3%83%88%E3%83%94%E3%83%BC