赚大钱的套路都是一样的

1. 一个幻想

如果全世界每人给我一毛钱,那我不是有六个亿了?

这个套路是收割大量粉丝,很遗憾普通人做不到。

2. 改进版——收割未来

思考一个问题:市盈率为 1000 是什么意思?

另一个比较平民的问题:厦门房屋租售比高达 1∶756 是什么意思?

答案:

靠分红至少 1000 年才能收回本金。

靠收租 63 年(即 756 个月)才能收回购房本钱。

公司上市后,核心员工拿到的红利,本质上是未来的钱,其它自己拿钱去买股票的人,都是潜在收割对象。其中有一种,比较特别的人是:后期加入没有分到股票、期权的员工,他们因为对公司有感情,得到消息也比外界散民多,所以自行买入,甚至参与员工持股。

请自行搜索:一个惊人的数据——员工持股七成被套!

有人在房价上升期买了房子,两年后就卖了,赚到可观的差价。有的倒霉蛋,买完,房价就不涨了,靠收 63 年租是很悲剧的,毕竟房子寿命一般 50 年,属于您的时间最长也就 70 年。

3. 除了死,一切趁早。

请自行搜索:1900名高管辞职创近5年纪录

中国股市这一轮暴跌导致了中产阶级和平民怎么样的损失?

所有人都在谈论中产阶级和平民,却没有注意到高层,也就是那些上市公司的控股股东,他们才是真的惨。因为普通人炒股很少带杠杆,而股东们,基本上全都带有杠杆。

EOSIO 资源分配机制

本文为 MEET.ONE 发布的《EOSIO CPU 资源分配原理分析》 的个人版本,稣是其主要编辑之一。

1. 相关概念

您没看错,以下要介绍的几个概念,都是金融词汇。稣的柚子系列文章,又名《程序员转行做金融》,并兼职卖柚子……

  • 存款准备金率

    Deposit-reserve Ratio。存款准备金是指金融机构为保证客户提取存款和资金清算需要而准备的,是缴存在中央银行的存款,中央银行要求的存款准备金占其存款总额的比例就是存款准备金率。

    经常能听到的“降准不降息,等于装牛逼”里面的“降准”全称就是“降低法定存款准备金率”。

    举个外星的例子:如果存款准备金率为 1‰,就意味着金融机构每吸收 1000 元存款,要向央行缴存 1 元的存款准备金,用于发放贷款的资金为 999 元。

  • 挤兑

    Run on Banks。在银行券流通的条件下,银行券持有者争相到发行银行券的银行要求兑现贵金属货币的现象。当一家银行的信用发生动摇,准备金不足,银行券兑现发生困难,就会发生挤兑。挤兑可能使一家银行倒闭,甚至波及整个银行业。现在一般是指存款户集中地大量地到银行提取现钞。

  • 涨跌停板制度

    这个不解释了……就问一句:连续 5 天跌停和一天暴跌 41%,您喜欢那种?如果您喜欢没有板的,再多问一句:一天暴跌 99.9% 您觉得怎么样?

  • 峰谷电价

    又称“分时电价”,也很好理解。再举个类似的例子:下班高峰期打的,不加价基本打不到,因为别人加价优先接单。

2. 资源分配基本原则

EOS 账户可用资源与其抵押给资源的柚子数量的关系是:可用资源 = 总可用资源 * 本用户抵押数量 / 全体用户抵押数量。从这个关系上看,存在两个风险:

  • 大户挤兑散民;
  • 占着茅坑不拉屎。

第一个问题,用成本来解决,要通过加仓把别人的比例减少,按目前 3-4 亿的抵押量来说,需要付出的代价极高。

第二个问题,则通过引入一个放大因子来解决。之所以能放大是因为,某个时间点不拉屎的确实占大多数。只要把您拉屎的时间,除以一天的时间,就可以算出您一天拉屎的占用率。相信是很小的,笑……虽然您有柚子,就有拉屎的权利,但您自己不拉,让给需要拉的也是合理的,毕竟资源利用起来才是好事。

以 CPU 为例,计算公式为:

可用 CPU 微秒数 = max_block_cpu_usage * (account_cpu_usage_average_window_ms / block_interval_ms) * staked_cpu_count / total_staked_cpu_count

其中 max_block_cpu_usage 是可配置的,当前主网配置为默认值 default_max_block_cpu_usage = 200000

所以 max_block_cpu_usage * (account_cpu_usage_average_window_ms / block_interval_ms) = 34560000000

以主网 2018-10-19 为例,CPU 总质押量为 280053493.80756617 EOS,所以每个 EOS 可用 123.40 us。注意:这个数值是没有放大过的。

3. 堵车问题

EOS 定义了两种资源使用状态:拥堵、空闲,由过去一分钟每个块的平均使用量来界定。还是用 CPU 说事:大于 max_block_cpu_usage * target_block_cpu_usage_pct 则进入拥堵。

两个状态下的可用量本来应该有 1000 倍的差距,但因为有涨跌停板保护,并不会直上直下。每一分钟,只能跌到 99/100,只能涨到 1000/999。所以从拥堵开始到绝对拥堵,有 log(0.001) / log(0.99) = 687 分钟之长;从绝对拥堵完全恢复更慢,是 log(1000) / log(1000/999) = 6904 分钟。目前的 target_block_cpu_usage_pct 已经从 10% 调整到 20%,它提高了总使用量临界值,使拥堵状态更难触碰。

可用量的变化过程是可能随时改变方向的,类似多头和空头拉锯。比如拥堵时,可用量变少,能够使用资源的用户也随之减少,使用量降到阈值以下,可用量又会开始慢慢上升。

4. 阈值的设定

max_block_cpu_usage 和 target_block_cpu_usage_pct 都是可以配置的,为什么不一次性配高点呢?主要考虑的因素是,目前各个 BP 的机器性能参差不齐,如果冒然的把这两个值调高,可能会导致节点 replay 变慢,同时对于配置低的机器来说,同步区块也会很吃力。别忘了,我们的准备金率才 1‰,属于严重超发,提高可用率,虽然会使拥堵来得晚点,但真到拥堵的那刻,爆发的能量可是更大的哦!

总之,还是稳一点好,慢慢涨经验。目前来看昨天的调整,对节点之间的同步、CPU 使用率没有太大影响。

5. 参考

EOSIO 代码

EOS资源模型

诗盗·肥肉是精神累赘

《#诗盗#·肥肉是精神累赘》:码农低薪城鱼贵,山鸡高瘦厦羊肥。穷不顾身富健美,老来病残高消费。

注解

农民进城写代码,发现农村一斤十几的黄翅,城里卖三四十,实在吃不起……
闽清山里有种高脚鸡,几乎没有肥肉,连皮也没有油脂,但是抓回厦门的农村养,全都养肥了!更何况那些肥羊!大量脂肪都是输送到农村富集起来,吃不完的肥肉拿去喂鸡,鸡都肥了,人再吃肥鸡,循环肥胖。
去城里超市买羊肉,只能吃得起一斤三十的肥羊肉,而在山里,几乎没有肥肉的羊肉一斤才六十,这要在城里估计得上百了,突然分不清哪里的消费高。在城里因为穷,吃不起好的品种,回到山里才能吃得起。
最后不得不得出一个结论:穷人才容易吃胖!这是在浪费生命啊!

诗盗·量子邪稣

《#诗盗#·量子邪稣》:生死无待,诡道莫测,量子邪稣藐神话。

注解

生死无待:叠加态
诡道:诡异的轨道
莫测:海森堡测不准原理

霹雳角色“昊天”的诗号:

一睨仙魔惊叹,一笑天地独尊。六界布武,在予一人,始主藐神话

《诗盗·骚年游》

《#诗盗#·骚年游》:
算来好景只如斯,惟许有钱支。寻常装逼,等闲递笑,诚意吉祥意。
十年情了音尘断,往事不胜思。一狗惨叫,半脸肥鸡,总是咬人屎。
仕途茫然财路断,全家不够吃。一心补脑,半脸肥猪,总吃卵磷脂。

注解

作者:那男性CEO开

人工神经网络训练方法——后向传播

人工神经网络训练方法——随机查找》介绍的随机查找方法,有点盲人摸象,所以继续介绍主流的后向传播(BackPropagation)算法。

填坑

先给随机查找做个优化!上篇中的激活函数统一使用 ReLU,其实这是不好的,输出层可以改为 Sigmoid 或 Tanh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
inline double ActivationFunction_ReLU(double x) {
return std::max(0.0, x);
}
inline double ActivationFunction_Sigmoid(double x) {
return 1.0 / (1 + exp(-x));
}
inline double ActivationFunction_Tanh(double x) {
return (tanh(x) + 1.0) / 2;
}

double AnnRun(const double x[2], double* w) {
double f = ActivationFunction_ReLU(x[0] * w[0] + x[1] * w[1] - w[2]);
double g = ActivationFunction_ReLU(x[0] * w[3] + x[1] * w[4] - w[5]);
return ActivationFunction_Sigmoid(f * w[6] + g * w[7] - w[8]);
}

原因很简单,我们已经知道 Xor 的结果不是 0 就是 1,用 ReLU 是可能大于 1 的,而 Sigmoid 和 Tanh 不会大于 1。

后向传播

理论学习:《如何直观地解释 back propagation 算法?》

原理:求导

训练时,x 和 y 都是固定的,要求的是 a 和 b,所以问题是:当 y 偏离了 delta_y,求 a 和 b 应该修正多少?

分别对 a 和 b 求偏导,则:

1
2
dy/da = x
dy/db = 1

所以

1
2
delta_a = delta_y / x
delta_b = delta_y

代码不会骗人,来一个简化的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// BackPropagation.cpp
//

#include <iostream>

void Train(double& a,
double& b,
double input,
double expect_output,
double learning_rate)
{

double delta_y = expect_output - (input * a + b);
if (input != 0) {
a += (delta_y / input) * learning_rate;
}
b += delta_y * learning_rate;
}

int main() {
// 要求的函数是:y = 2 * x + 3
const double input[4] = {0, 1, 2, 3};
const double expect_output[4] = {3, 5, 7, 9};

// 初始化状态是:y = 1 * x + 4
double a = 1.0;
double b = 4.0;

std::cout << "Initial: y = " << a << " * x + " << b << "\n";

// 两轮就搞定了
for (int t = 0; t < 2; ++t) {
for (int i = 0; i < 4; ++i) {
Train(a, b, input[i], expect_output[i], 1);
}
}
std::cout << "Trained: y = " << a << " * x + " << b << "\n";

return 0;
}