为何谷歌围棋AI AlphaGo可能会把李世石击溃
author: 张俊林
谷歌DeepMind开发的人工智能围棋程序AlphaGo以5:0的压倒性优势击败了欧洲围棋冠军、专业二段棋手Fan Hui。这是近期一周来最火爆的新闻了。16年3月份AlphaGo会和近期10年平均成绩表现最棒的韩国九段、世界冠军李世石进行对弈,这无疑也是最吸引眼球的一场人机世纪大战,假设此役AlphaGo获胜。这意味着人工智能真正里程碑式的胜利。从此起码在智力博弈类游戏范围内,碳基体人类将无法抵挡硅基类机器的狂风骤雨,不知这是该令人惊恐还是令人兴奋呢?
反正我是属于看了这个新闻像被注射了兴奋剂似得那类具备反人类人格犯罪分子的兴奋类型@^^@。
当然,本文的标题有点哗众取宠,可是并非毫无依据的。
如今的问题是:三月份的人机大战中,李世石的胜率能有多高?是AlphaGo击败人类还是李世石力挽狂澜。维护人类尊严?此前众说纷纭。各种说法都有。
可是看上去都是没什么依据的推測。我在深入了解了AlphaGo的AI运作机制后,斗胆做出例如以下预測,到时可看是被打脸还是可以成为新世纪的保罗。首先强调一点,我这个预測是有科学依据的。至于依据是什么,后文会谈。
假设是5番棋。预測例如以下:
假设李世石首局输掉。那么AlphaGo非常可能获得压倒性胜利,我预估AlphaGo会以4:1甚至5:0获胜;
假设李世石首局赢,可是第二局输掉,那么AlphaGo可能会以3:2甚至4:1胜出;
假设李世石首局和第二局都赢,那么AlphaGo可能会碾压性失败。局面可能是0:5或者1:4。
也就是说,局面非常可能是一方压倒性胜利,要么是AlphaGo要么是李世石。并且首局胜败可能起到关键作用。为什么这么说呢?我们要了解AlphaGo是怎么下棋的。
|下围棋的本质是什么?
图1 下围棋是在干什么
下围棋的本质是在干什么?图1事实上基本就说明了问题了。两个棋手(这两个棋手可能当中一个人类一个AI。或许两个都是人类或者两个都是AI,这不重要)刚開始都是面对一个19*19的空棋盘,执黑先下子,下子是什么意思?就是在当前棋局S下(刚開始S就是空棋盘),推断下个子应该放在哪里更好,全部合法的落子位置都在考虑范围。比方开局第一子,不论什么一个棋盘位置落子都是可以的。可是这里面有些是好的落子位置,有些是不好的落子范围,至于究竟好不好,由于棋还没下完,临时不知道,仅仅有最后决出输赢才干说这个子落得好不好。
假设黑方选定了一个落子位置。则棋局局面从S进入到S1,此时该白方下。一样的。白方面对非常多可能的落子选择,然后选择一个他觉得最好的…..就这么依次下下去,直到决出输赢为止。
从这里可以看出。从落第一个子到下完。整个下子的决策空间形成了一个非常巨大的树形结构。之所以我们说围棋难,就是由于这颗树的宽度(就是应该落哪个子)和深度(就是一步一步轮着下子)都太大了,组合出的可能空间巨大无比。基本靠搜索遍整个空间是不可能做到的。
所以你看到下围棋本质是什么。就是在这颗超大的树搜索空间里面,从树的根节点。也就是空棋盘。顺着树一路下行,走出一条路径,路径的末尾就是已经决出胜负的棋局状态。
由于搜索空间太大。所以围棋AI不可能遍历全部可能的下棋路径,那么仅仅能学习一些策略或者评估函数,依据这些策略可以大量降低搜索空间,包含树的宽度和深度。
有了这个基础。我们可以讲AlphaGo了。
AlphaGo的技术整体架构假设一句话总结的话就是:採用深层CNN神经网络架构结合蒙特卡洛搜索树。
深度学习神经网络训练出两个落子策略和一个局面评估策略。这三个策略的神经网络架构基本同样,仅仅是学习完后网络參数不同而已。并且这三个策略是环环相扣的:落子策略SL是通过学习人类对弈棋局,来模拟给定当前棋局局面。人怎样落子的思路。这是纯粹的学习人类下棋经验,它的学习目标是:给定某个棋局形式,人会怎么落子?那么AlphaGo通过人类对弈棋局来学习这些落子策略,也就是说SL策略学习到的是像人一样来下下一步棋;
落子策略RL是通过AlphaGo自己和自己下棋来学习的,是在SL落子策略基础上的改进模型。RL策略的初始參数就是SL落子策略学习到的參数,就是它是以SL落子策略作为学习起点的,然后通过自己和自己下棋,要进化出更好的自己,它的学习目标是:不像SL落子策略那样仅仅是学习下一步怎么走,而是要两个AlphaGo不断落子,直到决出某盘棋局的胜负。然后依据胜负情况调整RL策略的參数,使得RL学习到怎样可以找到赢棋的一系列前后联系的当前棋局及相应落子,就是它的学习目标是赢得整盘棋,而不是像SL策略那样仅仅预測下一个落子。
局面评估网络Value Network採用相似的深度学习网络结构,仅仅只是它不是学习怎么落子,而是给定某个棋局盘面,学习从这个盘面出发。最后可以赢棋的胜率有多高,所以它的输入是某个棋局盘面,通过学习输出一个分值。这个分值越高代表从这个棋盘出发。那么赢棋的可能性有多大;
有了上面的三个深度学习策略。AlphaGo把这三个策略引入到蒙特卡洛搜索树中,所以它的整体架构还是蒙特卡洛搜索树。仅仅是在应用蒙特卡洛搜索树的时候在几个步骤集成了深度学习学到的落子策略及盘面评估。
AlphaGo的整体技术思路就是上面说的。那么我们从这些技术原理可以得出什么结论呢?我对各个部分的分析和结论例如以下,这也是为何本文开头作出那个人机大战预測的科学依据所在。
|SL落子策略
首先,我们看落子策略SL,就是那个依据人类对弈过程来学习像人一样落子的策略。这个策略重要吗?重要,可是仅仅靠这个策略可以战胜人类世界冠军吗?我的结论是不可能,靠这个策略一万年也赢不了人类。
为什么呢?你要考虑到非常关键的一点:AlphaGo这个策略是通过看了16万局人类对弈棋局来学习的。可是问题的关键是,这些下棋的人素养整体有多高?假设以职业棋手水平来衡量。平均下来整体素养事实上是不高的,里面大量棋局是业余选手下的。即使有不少专业选手下。高段位选手肯定不会太多。那么AlphaGo从这些二流选手下棋落子可以学到每步棋都达到九段水平吗?这不太可能。
图2 AlphaGo和fan hui对弈过程中的SL落子策略得分。图中某些位置的得分代表AlphaGo觉得落子位置有多像人会选择的落子位置
所以我的结论是:假设人工智能程序仅仅能从人类棋手下的盘面学习。依照眼下的学习方式,机器永远也无法战胜最好的人类,由于它学习的对象平凡者居多,三流师父永远教不出一流的徒弟。这个道理非常easy。假设仅仅用这种方法。就算AlphaGo看到再多人类的比赛也无法战胜人类。除非它看到的都是超一流选手的盘面,那么它可以成为超一流选手。可是面对人类最强手,并没有必胜的把握。
那么岂不是说三月的对决中,AlphaGo必败无疑了?事实上不然,上面这点说的是SL策略的弱点,可是AlphaGo的论文给出了数据,SL策略比传统单纯使用蒙特卡洛搜索树的策略下子准确率从44%提升到了55%左右。这个55%是什么意思?意思是SL策略做了100次落子,当中55个落子是和人落子位置同样的。
看上去55%好像也不太高么,没什么可怕的。你肯定这么想,是吧?你错了!
你要看44%到55%的提升幅度,由于SL策略仅仅是决定了单步落子。而单步落子小幅度的准确率提升。会极大提升终于赢棋的胜率,由于你想啊,一个棋局是由几百个落子构成的,每一步的小幅度准确率提升。经过几百次不断累积,那终于结果差异是非常大的,这就是所谓的“积小胜为大胜”的道理。这是机器对人非常大的一个优势,由于它稳定。假设准确率达到一定程度。就不easy出昏招,仅仅要依靠每一步的小优势不断积累就能获得巨大的累积优势。
人类事实上相对机器另一个非常大的劣势:人的理性决策太easy受到情绪影响,一旦自己局面处于不利地位,或者自己下了一步臭棋,预计后面连续若干落子都会受到影响,并且下到后面人预计比較疲劳了,算棋能力下降难免,可是机器全然没有这两个问题,可以非常冷血非常冷静的跟你下,下了好棋也没见AlphaGo笑,下了臭棋也没见AlphaGo哭。体力无敌,仅仅要你不拔它的电源插头,它就面无表情地跟你死磕究竟,是不是这个道理?
所以说,即使AlphaGo仅仅有SL落子策略,假设它的落子水平是5段,那么事实上考虑到这些优势,它基本上是能稳赢人类5段这样的同样段位棋手的。这也是为何本文开头预測三月人机大战可能是如此结果的一个重要參考因素。
李世石肩上担着这么个重担,并且这是世界瞩目的一场比赛,他全然没有心理负担是不可能的,或许他看了AlphaGo和Fan Hui的棋局,如今心理上同一时候蔑视AlphaGo和Fan Hui棋力渣。可是假设初赛不利。非常可能会被冷血的机器打崩溃。
|RL落子策略
然后。我们再来看落子策略RL。
前面提到。它学习的目的和落子策略SL不一样,落子策略SL就是学习单步怎样像人一样落子。至于后面这局棋是输掉还是赢了它事实上没学到什么东西,它仅仅要保证说面对眼下的棋盘布局。像人一样落下下一个子就行了。而落子策略RL学习目标则是以赢棋为目的,是说经过若干轮博弈。终于赢棋那么它就觉得在这个对弈过程中的相应的棋局和落子就是值得鼓舞的,并把这些鼓舞体现到深度学习模型參数里面,意思是以后看到相似的局面,更倾向于这么去落子,由于这么落子非常可能终于会赢棋。它自己和自己下完一局棋。假设胜利了,那么在这条通向胜利结果过程中的全部棋局相应的落子都会得到鼓舞。
事实上对于人类来说。这样的自己和自己下棋的RL落子策略才是真正可怕的,由于它可以通过这样的方式不断自我进化。它自己和自己下了一盘棋等于干了个什么事情?等于说在下棋落子巨大的树组合空间中,搜索找到了当中一条从空棋盘開始到终于胜负已分通向胜利的一条落子路径,而依据这个路径是赢了还是输了调整模型參数,使得模型以后更倾向于选择这条路径。意思是假设以后和人下棋。一旦有一局中某个落子方式在它的这个学习路径中,那么它就倾向于走出那一系列让它赢的策略。
由于它的核心目的等于是在全部树空间里搜索,然后学习找到那些easy赢的路径,学习的结果是更倾向找到那些导致终于赢旗的路径,这个仅仅要不断地自己和自己下理论上能力是可以不断提高的,由于围棋组合出的树空间尽管巨大无比。毕竟还是有限的,自己和自己对战等于在不断找出并记住那些可以赢棋的落子路径,对战次数越多,穷举出这些路径的可能性越大,也就意味着它棋力在不断提升。
从这个角度看,这也是为何说它可怕在此处的一个原因。
当然,这个左右互搏的自闭症儿童式的自我下棋,它也不是没有弱点,它的弱点是:AlphaGo是依据一个赢旗的路径走的。倾向于学习这个路径上的落子策略,可是在真实下棋过程中,或许对手不会选择这条路径,那么后面学到的看似就没用了,可是这个弱点事实上在现实场景中问题也不大:由于AlphaGo的自我下棋的对手(也是它自己)也是有一定水平的,所以对手选择的落子也会非常高概率落在真正人类选手选择的落子位置,即是说它选择的这个路径是在再次和其他对手下非常可能走的一条路,假设再全然重走这条路径,那么计算机必赢。
综上分析,落子策略RL通过这样的自我对战来在巨大的树搜索空间中找到赢棋路径的方法是比較可怕的,由于理论上它仅仅要不断自我对弈。是可以不断提高下棋水平的。这是人机对决中人类不乐观的的一个方面,由于就像上面说的,仅仅要你不拔机器的电门。它就行不眠不休地去玩自闭症游戏,事实上人工智能不可怕,可怕的是可以不断自我学习自我进化的人工智能。
|棋局评估Value Network
Value Network也是通过3000万盘AlphaGo自我对战来进行学习的,它是建立在RL落子策略之上的,由于此刻RL落子策略已经代表了一个棋力比較高的棋手了。只是这个棋手就是AlphaGo自身而已。Value Network它要学习什么东西?它要学的是:给定当前棋局布局,也就是AlphaGo看到的当前棋盘情况。那么这个棋盘布局有多大可能会导致最后赢棋?这就是它学习的目标。Value Netwok的本质思想是:假设当前棋局处于局面S,那么假设这时候有两个眼下最强的棋手,就是两个採取RL策略的棋手从局面S開始继续往下下棋。那么从局面S出发。终于赢旗的可能性有多大;由于这两个RL棋手会尽可能走那些局面S出发产生的子树里面,它们各自觉得可以导致胜利的路径,所以通常是树搜索子空间里面easy被棋手选择到的路径,评估了这些路径后综合出这样的棋局S终于可能胜利的可能性,获胜可能性越大。意味着从棋局S出发的这个搜索个子树空间里面通向胜利局面的路径越多,所以它是个“大面积搜索路径覆盖”的策略;
事实上综合上面三个策略。可以看出:SL落子策略相似于点覆盖。由于它仅仅考虑下步旗子怎么走。仅仅覆盖了一步棋。RL落子策略相似于线覆盖。由于它事实上在找一条可以赢棋的走棋路径;而Value Network相似于面覆盖。由于它评估的是当前棋局S出发,全部可能走的搜索路径中综合看通向胜利的下棋路径有多少,越多越好。AlphaGo就是这么利用深度学习来进行搜索空间点线面结合来提升棋力的。
图3 AlphaGo和Fan Hui对弈过程中,对棋局的评估,相应位置的得分意味着假设把旗子落子这个位置,那么这个落子后的棋局最后赢棋的可能性
|蒙特卡洛搜索树
蒙特卡洛搜索树可以说是一项导致围棋人机对战过程中突破性的技术进展,有了蒙特卡洛搜索树,就把机器选手从没资格和人类对战带到了有资格和业余选手进行对战的境界,可是仅仅靠蒙特卡洛树是不够的。由于树搜索空间太大,假设蒙特卡洛採样太多。固然easy找到下棋的最优路径,可是速度会太慢。跟它下人类选手会掀桌子的,所以在实战中採样不可能太多,那么非常可能就找不到最优下棋路径,这也是为何在获得能和业余选手对战后,难以再获得大的突破的主要原因。
图4. 蒙特卡洛搜索树
AlphaGo本质上大的技术框架还是蒙特卡洛树。可是根本的不同在于把上面讲的两个落子策略和一个局面评估神经网络引到蒙特卡洛树搜索过程中。蒙特卡洛搜索树也须要对棋局盘面进行评估,AlphaGo採用了上面讲的Value Network和传统的採样评估相结合的思路来做。在採样进行过程中,要模拟两个棋手对弈。AlphaGo採用了落子策略SL来模拟两个对战棋手;而落子策略RL则用在了Value Network网络中,我们讲过Value Network是在RL策略基础之上的,其作用也是相似两个採取RL策略的棋手去下棋。
决定蒙特卡洛搜索树效果的事实上主要有两个因素,一个就是上面讲的採样数量,数量越大效果越好,可是速度会比較慢,在这点上AlphaGo事实上并没太在意。第二点是模拟两个棋手对弈,那么这个棋手棋力越强,那么高速探索出优秀路径的可能性越大,AlphaGo事实上把工作重心放在这里了,也就是那两个落子策略和Value Network棋局评估策略。这也是为何说AlphaGo有技术突破的地方,由于它的重心不在暴力搜索上,而是寻找好的下棋策略。
前一阵子网上讨论Facebook围棋AI “暗黑森林”和AlphaGo谁先谁后问题。事实上你看过他们各自发的论文就明确这样的争论全然没有必要。之前有几项工作都是结合深度学习学习落子策略和蒙特卡洛搜索树方法结合的文献,可是效果应该仍然徘徊在和业余棋手对弈的阶段,包含Facebook的围棋AI,本质上并没有跳出这个思路。导致AlphaGo和其他工作最大的不同事实上是那个通过3000万局自我对战产生的RL落子策略和Value Network。而这两者在当中发挥的作用也是最大的,所以AlphaGo对围棋AI产生质的飞越是无可置疑的。而没有疑问的一个坏消息是,即使3月份AlphaGo输掉比赛,从机制上讲,AI胜过人类选手是必定的,这仅仅是时间问题而已。
AlphaGo的意义不仅仅在于围棋领域,由于DeepMind採用通用的AI技术来研发AlphaGo,其关键算法可以平滑迁移到非常多其他领域。并有望在非常多其他领域获得突破性进展。另外,我的个人意见,DeepMind是个令人尊敬的技术团队,他们关注的都是深度学习中重大的问题并不断有突破性成果出来,搞研究事实上就应该以这样的团队作为模范。
上面这段看上去好像是要结尾的意思,事实上并非,我们最后再附上一小段技术流。
|深度学习网络架构
上面讲过两个落子策略以及棋局评估神经网络,其架构都是相似的,当中两个落子策略的架构如图5所看到的,棋局评估神经网络的架构如图6所看到的。
图5 Policy Network网络结构
图6 Value Network网络结构
对于两个落子策略来说,其神经网络的输入是19*19*48的三维数据,19*19是一个棋盘的画面,48是由于选择了48类特征来从不同角度描写叙述这个棋盘,所以输入是三维结构。经过12层CNN的卷积层。然后最后套上一个SoftMax分类层。
输入是棋盘局面S,输出是针对这个棋盘局面。以下应该怎样落子,所以SoftMax分类层给出的是各种合法落子位置的分类概率。
AlphaGo就选择概率最高的那个位置去落子。
对于SL落子策略来说,训练数据就是3000万<S,a>集合,就是人下棋的过程。S是面对的某种棋局,a是人接下来把旗子放到哪里。这样通过CNN网络,依据输入棋局,就能学会人大概率会把旗子落在哪个位置,所以说它学的是人怎样单步落子。3000万看上去多,事实上并不多。这是落子数量,真正的对弈棋局数量也就16万局对弈过程,由于每一个对弈过程包含非常多落子步骤。所以总数看上去多而已。
对于RL落子策略来说,它学的是怎样赢得一局,这里用到了增强学习的Q函数。
可是学习过程跟SL是相似的,无非是两个AlphaGo先下一盘。然后看看是输了赢了,并把输赢的分数赋给整个过程中的每一个棋局及其相应的落子步骤,这样每一个棋局及其落子步骤都会有个输赢得分,依据这个得分调整之前学到的SL落子策略学习到的參数,这样就通过自我对弈来学会怎样赢得一局棋。
对于局面评估Value Network来说,其网络架构如图6所看到的,这里和图5的结构略微有不同。就是输出层不是SoftMax分类。而是一个回归函数,学习到一个数值。而不是分类。这个正常,由于它的目的是给当前棋局一个估分,而不是学习落子策略。它的输入是从自我对战的3000万局比赛中随机抽取某个时间的棋局状态,并赋予这个棋局状态一个赢棋得分,然后把这些数据当成训练数据。交给这个神经网络去学习给定一个局面,怎样给出一个赢棋可能的打分。
好了,整个过程感觉已经说清楚了,就到这吧,觉得写得还算不错的话....你看着办吧,要知道,写东西事实上是个挺消耗时间和体力的事情,尤其是相似本文这样的精品@^^@。
扫一扫关注微信号:“布洛卡区” ,深度学习在自然语言处理等智能应用的技术研讨与科普公众号。
为何谷歌围棋AI AlphaGo可能会把李世石击溃的更多相关文章
- 李飞飞确认将离职!谷歌云AI总帅换人,卡耐基·梅隆老教授接棒
https://mp.weixin.qq.com/s/i1uwZALu1BcOq0jAMvPdBw 看点:李飞飞正式回归斯坦福,新任谷歌云AI总帅还是个教授,不过这次是全职. 智东西9月11日凌晨消息 ...
- 世界围棋人机大战、顶峰对决第二战:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,AlphaGo再次胜出!
感觉在哔哩哔哩(bilibili)上看比赛直播比较好,一直可以看到比赛的直播画面,还能听到英文解说和中文主持人的解说.YouTube上是不错,但是一方面爬梯子比较卡,另一方面只能听到英文解说. 韩国著 ...
- 世界围棋人机大战、顶峰对决第一盘:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序
Match 1 - Google DeepMind Challenge Match: Lee Sedol vs AlphaGo 很多网站对世界围棋大战进行了现场直播,比如YouTube.新浪.乐视.腾 ...
- 围棋规则 - AlphaGO
参考:4分钟了解围棋规则 看懂柯洁和AlphaGo的对决并不难 围棋规则: 1. 19X19的棋盘上有361个落子点: 2. 黑白棋子依次落子: 3. 比赛结束时,占地多者胜: 4. 上下左右相邻的棋 ...
- facebook darkforest围棋ai测试
0.darkforest说明 darkforest是facebook田渊栋博士开发的深度学习围棋程序,2016的uec cup得了第二名(http://jsb.cs.uec.ac.jp/~igo/en ...
- BZOJ4572: [Scoi2016]围棋
Description 近日,谷歌研发的围棋AI—AlphaGo以4:1的比分战胜了曾经的世界冠军李世石,这是人工智能领域的又一里程碑. 与传统的搜索式AI不同,AlphaGo使用了最近十分流行的卷积 ...
- 【bzoj4572 scoi2016】围棋
题目描述 近日,谷歌研发的围棋AI—AlphaGo以4:1的比分战胜了曾经的世界冠军李世石,这是人工智能领域的又一里程碑. 与传统的搜索式AI不同,AlphaGo使用了最近十分流行的卷积神经网络模型. ...
- [SCOI2016]围棋
Description 近日,谷歌研发的围棋AI-AlphaGo以4:1的比分战胜了曾经的世界冠军李世石,这是人工智能领域的又一里程碑.与传统的搜索式AI不同,AlphaGo使用了最近十分流行的卷积神 ...
- 蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探
1. 蒙特卡罗方法(Monte Carlo method) 0x1:从布丰投针实验说起 - 只要实验次数够多,我就能直到上帝的意图 18世纪,布丰提出以下问题:设我们有一个以平行且等距木纹铺成的地板( ...
随机推荐
- Knockout.Js官网学习(Mapping高级用法二)
使用ignore忽略不需要map的属性 如果在map的时候,你想忽略一些属性,你可以使用ignore累声明需要忽略的属性名称集合: " }; var mapping = { 'ignore' ...
- UVA 10303 - How Many Trees?(数论 卡特兰数 高精度)
Problem D How Many Trees? Input: standard input Output: standard output Memory Limit: 32 MB A binary ...
- iOS开发-装饰模式
装饰模式是指在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.通过创建一个包装对象,也就是装饰来包裹真实的对象.装饰模式中的装饰对象和真实对象有相同的接口.这样客户端对象就能以和真实对象 ...
- 程序日志--ios“考反应扑克游戏”程序
交代一下我做程序的工具:mac os x虚拟机10.9.3 Xcode6 百度^-^ 參考书iPhone30天精通 总结与经验,还有遇到的问题,都在程序 ...
- centos安装memcached和PHP php-pecl-memcached.x86_64
安装memcached sudo yum install memcached.x86_64 安装php-pecl-memcached php memcache有两个实现类 php-pecl-memca ...
- Java 迭代器综述
一.摘要 迭代器模式是与集合共生共死的.一般来说.我们仅仅要实现一个容器,就须要同一时候提供这个容器的迭代器.使用迭代器的优点是:封装容器的内部实现细节,对于不同的集合,能够提供统一的遍历方式,简化c ...
- SpringCloud分布式事务TCC实现
可以参考 http://www.txlcn.org/ 的实现方式
- 【SqlServer】SqlServer的游标使用
什么是游标 结果集,结果集就是select查询之后返回的所有行数据的集合. 游标则是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据 ...
- Android studio3.1.3 打包jar,混淆
最近公司需要将数据进行打包提供给用户,需要我们提供数据解析的jar给用户,为了防止数据格式的泄露,需要进行混淆.这里记录一下封装jar并混淆的过程. 1.创建module 之后创建了几个需要演示混淆的 ...
- [svc]glusterfs的简单部署
服务端安装 gluster01主机挂载磁盘 [root@glusterfs01 ~]# mkfs.xfs /dev/sdb [root@glusterfs01 ~]# mkdir -p /data/b ...