ARTS-23(35. 搜索插入位置,SELU激活函数,本周几个问题, 招商银行财报分析)

Algorithm

https://leetcode-cn.com/problems/search-insert-position/
35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5
输出: 2
示例 2:

输入: [1,3,5,6], 2
输出: 1
示例 3:

输入: [1,3,5,6], 7
输出: 4
示例 4:

输入: [1,3,5,6], 0
输出: 0

思路:比较简单的二分查找题目,假设题意是叫你在排序数组中寻找是否存在一个目标值,那么训练有素的读者肯定立马就能想到利用二分法在 O(logn) 的时间内找到是否存在目标值。但这题还多了个额外的条件,即如果不存在数组中的时候需要返回按顺序插入的位置,那我们还能用二分法么?答案是可以的,我们只需要稍作修改即可。

考虑这个插入的位置 pos,它成立的条件为:

nums[pos−1]<target≤nums[pos]

其中 nums 代表排序数组。由于如果存在这个目标值,我们返回的索引也是pos,因此我们可以将两个条件合并得出最后的目标:「在一个有序数组中找第一个大于等于target 的下标」。

问题转化到这里,直接套用二分法即可,即不断用二分法逼近查找第一个大于等于target 的下标 。二分写法,ans 初值设置为数组长度可以省略边界条件的判断,因为存在一种情况是 target 大于数组中的所有数,此时需要插入到数组长度的位置。

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int n = nums.size();
        int left = 0, right = n-1, ans = n;
        while(left <= right){
            int mid = ((right - left) >> 1) + left;
            if(target <= nums[mid]){
                ans = mid;
                right = mid-1;
            }else{
                left = mid + 1;
            }
        }
        return ans;
    }
};

使用C++的STL只需要一行就可以了

return lower_bound(nums.begin(),nums.end(),target) - nums.begin();

Review

SELU激活函数

缩放指数线性单元(scaled exponential linear units,selu)是2017年的一篇论文:论文地址

ReLU激活函数推出之后,各种变形的研究就涌现出来,如Leaky ReLU,主要是没有完全消除负半轴的输出值,而是赋予了一个较小的斜率。但固定这个负半轴的斜率似乎找不到什么理论支撑,于是有人提出Parametric ReLU,即负半轴的斜率不是训练前就固定的,需要通过网络学习。
在这里插入图片描述
接着还有人提出Randomized ReLU,主要特点是负半轴的斜率是从一个分布中随机采样得到的,也就是训练时,每次迭代的负半轴斜率是不同的,这个有一点类似于dropout技术。另外,还有人提出了ELU,主要特点是,负半轴不再是线性的输出,而是一个指数函数。其中引入了一个参数α,也就是当输入趋近于负无穷时,输出是-α。

在这里插入图片描述
关于α的取值,有人提出了一个看似有点随意的方案,这个方案就是SeLU。其特点是:

  1. 输出有正有负(其实很多都有)

  2. 有饱和区(其实这个也是很多都有)

  3. 引入另一个参数λ,这个参数用于直接乘以输出值,有一点点放大的作用。

SeLU的具体定义如下:
在这里插入图片描述
是的,SeLU的作者直接把α固定为1.6732632…,然后乘以λ,λ也被直接固定为1.0507009…。就是这么简单的操作,也没什么好说的,只要稍微改一下代码就能实现。但是,有调参经验的同学肯定会投来一个不屑的眼神,因为使用SeLU是有一个小技巧的,这要从α,λ这两个看似风骚的参数是怎么设定的说起。

现在先推导在输入激活函数前z的分布:
在这里插入图片描述
在输入数据各维度符合iid条件,且符合正态分布,网络权值w符合均值为0,方差为1/K的情况下,输出z也符合正态分布。有些人会疑问z为什么一定是高斯分布呢,主要的依据是中央极限定理。在这个条件下,可以设计一个激活函数,使最终的输出a也符合正态分布。至于设计激活函数过程的推导由于有些复杂,就不再列出了。

所以,如果你要使用SeLU,为了满足上述的假设条件,输入数据应该是正态分布(预处理时要标准化,但实际实验中可能不一定需要),同时权值初始化时应该使用LeCun normal initializer的方法,这个初始化定义如下:
在这里插入图片描述
实际的公式如下:
在这里插入图片描述
其中lamada:1.0507009873554804934193349852946
alpha:1.6732632423543772848170429916717
这两个值是在文章中进行证明后得到的,如果需要得到归一化后得到指定均值和方差的lamada和alpha,文章中也给出了相应的计算公式。

下面给出tensorflow中实现的selu激活函数:

def selu(x):
  with ops.name_scope('elu') as scope:
    alpha = 1.6732632423543772848170429916717
    scale = 1.0507009873554804934193349852946
    return scale*tf.where(x>0.0,x,alpha*tf.nn.elu(x))

如果需要在e中添加新的feature,就比如SELU,有两种方法
1.在某文件中直接在to_layerRelu函数中修改成为to_layerSelu
然后再modetools。上neuronselu,如果有需要变换参数,就替换1.0,1.0,然后修改完py文件之后,就需要在cpu,Algorithm,rmv8a上实现。
2.如果自己加一个函数,就需要联动地修改至少4个新的文件,这样子可以学到更多。

Tips

已经存在的npe runtim的三个问题

1.multiinstance问题,npe框架不能压力测试,这就不行的,第三代芯片需要有虚拟机也就是HyperQ的东西,所以这个功能性测试需要在ETA之后进行测试。

2.不稳定的unstable问题, perf测试以及throughput测试都会在250次就stuck掉,而且还会有偶尔909的错误,这个root cause就是通过breakdown,从报出的错误代码中不断grep出具体的文件,函数。从一个flow表中可以看出执行的流程和具体的函数,从app端再到dsp端,通过加log去查看具体函数,成员变量以及一些op所花费的时间或者是否能够进入,我们可以看到网络的层数从中间的rpc到dsp端就错误了,变为了1层。讨论之后认为是memory不match,所以perf和909会产生。
3.虚拟机的linux和metal在dsp的npe的accele相差有2%-6%的差距,这个需要进一步check,具体的firmware还是平台配置的问题。
4. perf的问题:在三个平台上都不太稳定,甚至虚拟机都优于主met,这个是有问题的,所以需要debug几个perf的代码,不能因为buffer size的增加而增加,就算是check memory也不应该,仔细debug来龙去脉。
5. review一下rpc的优化性能的选项,这个和底层的东西有关。硬件,嵌入式,计算机组成原理。

Share

招商银行财报分析
提到银行,大家都会想到工农建中,尤其是工商银行,更是宇宙第一大行,从市值的角度来看,这四家银行的确是国内最大的四家银行。但是从投资的角度来看,这四家银行却未必是最值得投资的,或许招商银行更具有投资价值!

我们来分析一下招商银行,首先简单说一下银行业,银行业是“百业之母”,各行各业都避免不了和银行打交道,而且银行的盈利模式非常简单,主要从事资金买卖的中介业务。

中国过去20年,随着货币供应量的不断增加,再加上中国的银行,背后是国家信用担保,银行能够以非常低的利率借到资金,然后再向各行各业提供资金,所以可以快速发展。整体上来看,只要国家经济发展,那么银行业就可以持续发展。

那么投资银行股是不是就没有风险呢?当然不是,银行业整体上会持续发展,但是在发展的过程中并不代表没有危机,对于单个银行来说,更是如此。

首先,中国过去20年经济高速发展,背后是货币供应量的持续增加,而银行从事存贷款业务,货币供应量的增加自然也意味着银行资产规模的增加。但是未来随着货币增速的下滑,银行业的资产规模的高速扩张难以持续。

其次,银行业的同质化竞争严重,随着利率市场化的放开,各大银行为了争夺客户,价格战几乎是无法避免的,自然会压缩银行的利润。而且从西方国家的情况来看,未来企业的融资方式也将多样化,比如通过发行债券进行直接融资,这也会对银行业造成巨大影响。

最后,随着互联网金融的发展,以微信、支付宝为代表的互联网金融公司,正在冲击传统的银行业。

综上,如果同学们要投资银行股,一定要正视银行股的风险,并且寻找具有竞争优势的银行股,财报分析自然是非常有必要的,我们来分析下招商银行,并对比下五大行之首的工商银行以及与招商银行资产规模相仿的浦发银行。

我们来看下招商银行历史表现,看下分红情况

招商银行自上市来累计分红1120亿元,而且几乎每年的分红都在增长,非常不错。2019分红率达33.19%,在2020年经济面临严峻考验的形势下,这一分红超出市场预期。

对于任何一家银行来说,其收入主要来源于三部分,第一是净息差收入。第二是中间业务收入,这部分主要是客户提供服务的,主要指手续费及佣金。第三是其它业务收入,主要是投资收益等

那这三块收入的比例构成应该是什么样的呢?我们看到招商银行的净利息收入占比64%左右,比例最大。这是国内银行的特点,主要赚取利息差,简单来说就是赚存贷款的差价。这块收入是银行的主要收入来源,但是如果仅仅依赖这块业务,而这块业务同质化竞争严重,那么收入结构单一就是风险。

那招商银行净利息收入占比65%算不算高呢?我们来看看工商银行

工行2019 年利息净收入6,069.26 亿元,占营业收入的 71.0%,非利息收入2,482.38亿元,占营业收入的比重为 29.0%

可以看到,招商银行利息净收入占营业收入的比率远低于工商银行,说明招商银行具有差异化竞争的优势

下面我们具体来分析,首先看盈利端,先看净利息收入

净利息收入是由生息资产与计息负债共同决定的,计息负债是资金的来源,比如你往银行存10万块钱,定期一年。这笔钱是银行的负债,也就是计息负债,一年后银行要还本付息。
银行拿到钱之后,可以把钱以更高的利率借出去,形成生息资产。

银行赚取的主要正是计息负债和生息资产之间的利息差。简单来说银行就是以便宜的价格买进资金,再以较高的价格卖出去资金,这样就形成了净利息收入!

我们分别来看下招商银行的计息负债与生息资产的情况

首先看下计息负债,这是资金的来源。我们看到招商银行的计息负债6.29万亿,其中主要是客户存款共4.64万亿,同时我们看到客户存款的成本非常低,只有1.58%,远低于其它资金来源。我们再看下客户存款的构成

我们发现客户存款里主要是成本极低的活期存款,尤其是零售业务,活期存款的比率远高于定期存款,零售活期存款的平均成本率只有0.37%,零售业务是招商银行的核心竞争力。以工农建中为代表的四大行垄断了大型国企,股份制中小银行的发展必须要争取零售客户,而招商银行正是把零售业务做成了核心竞争力。

我们来看下工商银行

可以看到工商银行的存款规模非常大,存款结构比较均匀,平均付息率为1.59%,也非常低,这是工商银行作为五大行之首的竞争优势

我们再来看看与招商银行同为股份制银行的浦发银行

浦发银行主要也是公司客户,没有招商银行在零售业务上的优势,平均成本要高于招商银行,而且浦发银行的计息负债,有很大一部分是来源于同业拆借,这部分的利率成本高达3.79%,这也说明了浦发银行在客户规模上劣势。

综合来看,由于招商银行在零售客户上的优势,可以以较低的利息获得资金,使招商银行的成本端具有巨大的优势。

我们看到招商银行可以低成本借到钱,那能不能高价把资金卖出去呢?

我们来看看招商银行的生息资产,生息资产里主要为贷款和垫款,共4.3万亿,平均收益率为5.17%,综合平均收益为4.38%,贷款及垫款总额主要为零售贷款,综合平均收益率为5.17%,这个水平算高还是低,我们需要对比下

我们来看下工商银行

工商银行生息资产业主要为贷款和垫款,平均收益率为4.45%,综合平均收益为3.84%,
贷款及垫款总额主要为公司类贷款,综合平均收益率为4.45%,均低于招商银行,招行的个人贷款收益率远高于工行,所以招商银行要优于工商银行

再来看下浦发银行

银行的构成和企业的有差别哈,所以分析的方面不同

我们看到招商银行依靠零售客户的优势,净利息收入非常不错。我们再看下中间业务收入

招商银行中间业务收入,也就是手续费及佣金收入,这块收入占比连续3年下滑,说明增长放缓,这是什么原因呢?我们具体分析下

我们看到净手续费及佣金收入同比增长7.54%,其中银行卡手续费收入同比增长16.88%,主要是银行卡交易量增长,带动收入增长。

托管及其他受托业务这一块增长较少,主要是这两年经济不好,而且国家严控金融风险,实施了金融去杠杆的政策,打掉了很多通道理财,但招商银行的中间业务整体上依然增长,说明招商银行的竞争力较强。

最后来看下招商银行的其他收入,其他净收入的上涨主要为投资收益的上涨,占比较小,对银行的利润影响不大。

我们重点关注下资产质量

我们来解释下这几个指标,不良贷款率指的是不良贷款占贷款的比率,那什么是不良贷款呢?银行会把贷款分成五大类,其中次级类贷款、可疑类贷款以及损失类贷款为不良贷款

我们看到招商银行的不良率为1.16%,这个水平在银行业当中是非常低的,但是我们看到这五类标准其实比较主观,那如何验证不良率的可靠性呢?我们还要看下一个指标,那就是逾期90天以上贷款

如果一家银行逾期90天很可能意味着这笔贷款出现问题,那么应当放入不良贷款,所以不良贷款应该是要大于逾期90天以上贷款的,我们看下招商银行的情况

招商银行逾期90天以上贷款为633.63-188.99=444.64亿,而不良贷款总额522.75亿,招商银行计提的不良贷款大于逾期90天以上贷款,说明计提不良贷款很严格。

我们再来看下不良贷款拔备覆盖率,这里要说到拔备的概念,简单来说就是先拔出来准备着,银行放出去一笔贷款,并不是一定能收回来的,比如不良贷款。所以放出去一笔贷款,银行就需要计提拔备,也就是资产减值准备

从财务的角度看,这是一种谨慎态度,把可能的损失看作是成本,减少当期利润。但是其实这部分利润并不一定真正消失。简单来说,拔备计提越充分,银行的资产质量以及利润质量越高、越可靠。

招商银行不良贷款拔备覆盖率,也就是贷款损失准备/不良贷款余额426%,意思就是计提的贷款损失准备是当前不良贷款余额的4.26倍。

我们来看下工商银行的

我们看到工商银行的不良贷款率高于招商银行的1.16,而且从资产减值准备的计提上,招商银行也更充分,招商银行的资产质量非常好。

监管标准是,拔贷比也就是资产减值损失准备/贷款余额要大于2.5%,拔备覆盖率要大于150%,一般银行都在这个水平,而招商银行分别为426%,远高于监管层的要求,招商银行计提的拔备很充分,其实如果少计提一些拔备,那么招商银行的利润会大幅增加,目前招商银行的利润非常保守!

我们再来看下存款风险

贷款质量主要看放出去的钱能不能收回来,但是不要忘了,银行作为高杠杆的行业,借了大量的钱,是否能够满足存款人正常取钱呢?银行在负债端需要储备资金以防备风险

关于银行资本的指标叫“资本充足率”,先来了解下资本充足率的含义

我们知道银行做的是存贷款的生意,那么只要有人存钱,贷出去的钱能收回来了,银行就不会缺钱。但是万一经济不景气,放出钱的收不回来,那就是风险!所以监管层要求银行要有一定的自有资本。简单来说,就是借钱炒股的时候,不能无限制的借钱,你自己必须要投入一部分钱,且要达到一定比例。

对于银行来说, 监管层有资本充足率的要求,如果资本充足率低,那么银行就无法杠杆扩张(简单来说就是监管层认为你的资本不足,不允许继续对外放贷)

我们来看下招商银行的资本充足率,资本充足率包括核心一级资本充足率、一级资本充足率以及资本充足率,我们不需要了解每一级别的含义,我们对比下监管层的要求就可以了!

监管层对资本充足率要求分别为5%、6%、8%,我们看到招商银行资本充足率分别为11.95%、12.69%以及15.54%,比监管要求要高很多,说明招商银行未来还可以继续扩张。

综合来看,招商银行在盈利能力和风险控制上都具有优势,甚至在成本优势上可以和工商银行媲美。这是由于招商银行拥有最优质的零售客户群体,这与招商银行的发展战略有关,早在2004年,招商银行就开始大力发展零售客户业务,原因很简单,最优质的企业客户被工农建中占据着,其它银行想要脱颖而出,只有走零售客户。
而招商银行凭借多年的努力,优质的服务,致力于提升客户体验,形成了巨大的竞争优势,可以说是中国零售业务最好的银行!

最后给大家总结下银行股的分析思路,大家看下面这张图

我们投资一家公司,最关键的是看这家公司能不能赚钱,也就是利润。而对于任何一家银行的利润来说,我们都需要关注盈利能力,但更要关注风险。

盈利能力主要为净利息收入与非利息净收入,净利息收入既要看生息资产的收益率,也要看计息负债的成本率。而非利息净收入是一家银行通过自身的品牌或者特色化服务等优势带来的,这块业务未来的发展潜力巨大。同等情况下,中间业务占比较高的银行更好。

风险主要看贷款的风险以及存款风险,贷款风险主要贷款质量,要分析不良贷款率、拔备覆盖率以及贷款拔备率。计提拔备高,说明银行资产以及利润的质量高。

而存款风险主要看资本充足率,这决定了一家银行未来的扩张能力。而且资本充足率低的银行很可能会二次融资扩大股权资本,不太可能慷慨分红,所以要选择资本充足率较高的银行。

这是分析的主线,掌握了分析思路,大家就可以分辨出来银行股的好坏了

最后提示下各位同学,今天给大家分享银行股财报的分析思路,并不是建议大家去买银行股票,而是有不少同学对银行股感兴趣,所以今天从技能的角度,教大家分析思路
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值