プログラミングと数学の基礎が乏しい場合、人工知能を始めるにはどうすればよいでしょうか?

プログラミングと数学の基礎が乏しい場合、人工知能を始めるにはどうすればよいでしょうか?

1. AI開発の現状

1.1 コンセプト

Wikipedia によると、人工知能とは、人間や他の動物の自然な知能とは対照的に、機械が示す知能のことです。コンピューター サイエンスでは、AI 研究は「エージェント ソフトウェア プログラム」、つまり周囲の状況を認識して成功の可能性を最大化できるデバイスとして定義されています。

1.2 主な出来事

  • 2016年3月、AlphaGoは当時世界ランキング4位のプロ九段、イ・セドルと人間対機械囲碁対決を行い、合計スコア4対1で勝利した。
  • 2016 年 10 月、ホワイト ハウスは「人工知能の未来への準備」と「米国国家人工知能研究開発戦略計画」という 2 つの主要なレポートを発表しました。このレポートでは、米国の将来の人工知能開発計画と、人工知能が政府の仕事にもたらす課題と機会について詳しく説明されています。

VentureBeat はこれら 2 つのレポートを要約し、わかりやすい 7 つの要点を挙げました。

1. 人工知能は人類の利益のために使われるべきである。

2. 政府は人工知能を採用すべきである。

3. 自動運転車とドローンは規制される必要がある。

4. すべての子どもはテクノロジーの発展に遅れずについていくべきである。

5. AI は人間の労働者を置き換えるのではなく、補完するために使用します。

6. データの偏りを排除するか、偏りのあるデータを使用しない。

7. セキュリティと世界への影響を考慮する。

  • 2016 年のダブル イレブンでは、Luban は初めてダブル イレブンを実施し、1 億 7,000 万章の製品ディスプレイ広告を制作し、製品のクリックスルー率が 100% 増加しました。デザイナーがすべて手作業で作業した場合、各図面に 20 分かかると仮定すると、100 人のデザイナーが 300 年かけて作業することになります。

2017年、ルバンのデザインレベルは大幅に向上しました。彼は現在、何百万人ものデザイナーからクリエイティブなコンテンツを学び、数億ドル相当のデザインを進化させる能力を持っています。さらに、ルバンは 1 日に 4,000 万枚のポスターを生産する能力を達成しており、まったく同じものは 2 枚として存在しません。

  • 2017年5月、AlphaGo Masterは世界チャンピオンの柯潔を破った。
  • 2017 年 10 月 18 日、DeepMind チームは、コード名 AlphaGo Zero の最も強力なバージョンの AlphaGo を発表しました。
  • 2017年10月25日、サウジアラビアで開催された未来投資イニシアチブ会議において、サウジアラビアは米国のハンソン・ロボティクス社が製造した「女性」ロボット「ソフィア」に市民権を付与した。

市民権を取得した世界初のロボットであるソフィアは、その日、「自分は」人工知能を使って「人類がよりよい生活を送れるようにしたい」と語り、同時に「AI脅威論」を支持するマスク氏に「他人が私を怒らせない限り、私は他人を怒らせません!」と語った。

会合後、マスク氏は「映画『ゴッドファーザー』をAIシステムに取り込むことより悪いことが何かあるだろうか?」とツイートした。ゴッドファーザーは裏切りと殺人に満ちたストーリーの古典的なハリウッド映画だ。

ソフィアに市民権が与えられた後に生じる倫理的問題も、人々が考慮しなければならないものである。

近年、人工知能の分野では大きなニュースが多すぎるため、ここですべてを列挙することはしません。

2. 人工知能、ディープラーニング、機械学習、強化学習の関係は何ですか?

図に示すように、人工知能はエキスパートシステム、知識表現、機械学習などを含む大きなカテゴリであり、その中でも機械学習は現在最も注目され、最も発展している分野です。機械学習には、教師あり学習、教師なし学習、ディープラーニング、強化学習などが含まれます。

教師あり学習は分類とも呼ばれ、既存のトレーニング サンプル (既知のデータとそれに対応する出力) を使用して最適なモデルをトレーニングします (このモデルは関数のセットに属し、最適とは特定の評価基準に基づいて最適であることを意味します)。

このモデルは、すべての入力を対応する出力にマッピングするために使用され、出力に対して単純な判断が行われて分類の目的が達成され、未知のデータを分類する能力が得られます。

たとえば、幼稚園の頃は「絵から言葉を読む」というアクティビティをよくやっていました。上の写真のように、先生は絵の下に言葉が書かれた絵をたくさん見せてくれました。長い時間をかけて、私たちは脳の中に、2本の角、短い尻尾、太っている(特徴)などの抽象的な概念を形成しました...

この動物は牛です。空に浮かんでいる丸くて黄色い光るものは太陽です。人間もこのように見えます。似たようなものをもう一度見たとき、それが以前見たものとまったく同じでなくても、下の図に示すように、脳内に形成された概念と一致していれば、それを認識することができます。

[[213253]] [[213254]]

[[213255]]

教師なし学習は、広く研究されているもう 1 つの学習方法です。教師あり学習とは異なり、事前にトレーニング サンプルを用意する必要がなく、データを直接モデル化する必要があります。

たとえば、図に示すように、プロンプトなし (トレーニング セットなし) で、次の 6 つの図形を 2 つのカテゴリに分割する必要があります。どのように分割しますか? もちろん、1 行目に 1 つのカテゴリ、2 行目に 1 つのカテゴリです。1 行目の図形はより近く、2 行目の図形はより近いためです。

教師なし学習とは、データセットの分類を知らなくてもデータ内の特徴を見つけることです。

[[213256]]

ディープラーニングは機械学習に基づく新しい分野です。人間の脳の構造にヒントを得たニューラルネットワークアルゴリズムから始まり、モデル構造の深度が増すにつれて発展し、ビッグデータとコンピューティングパワーの向上に伴って一連の新しいアルゴリズムが生み出されています。

ディープラーニングの概念は、2006 年と 2007 年に「Sciences」などの雑誌に掲載された記事の中で、有名な科学者のジェフリー・ヒントン氏らによって提案され、推進されました。

[[213258]]

ディープラーニングは機械学習の拡張として、画像処理やコンピュータービジョン、自然言語処理、音声認識に応用されています。

2006 年以降、産学連携によるディープラーニングの研究と応用により、上記分野で画期的な進歩を遂げてきました。 ImageNet をデータベースとして画像内の従来のオブジェクト認識競争を例にとると、従来のアルゴリズムをすべて打ち負かし、前例のない精度を達成しました。

強化学習も機械学習の重要な分野であり、観察を通じてアクションの実行方法を学習します。それぞれのアクションは環境に影響を与え、学習オブジェクトは周囲の環境から観察されたフィードバックに基づいて判断を下します。

3. 数学の基礎はどれくらい重要ですか?

基本的な数学の知識を得るには、高校の数学の知識に加えて、高度な数学、線形代数、統計、確率論の知識が必要です。十分に習得できなくても、少なくとも概念を知っておく必要があり、必要なときにどこで調べればよいかを知っておく必要があります。

基礎がしっかりしていない場合は、まずは比較的理解しやすい呉俊の『数学の美』を読んでみてください。実践を通して学ぶこともできます。真実をテストするための唯一の基準は実践です。結局のところ、ほとんどの人は依然としてエンジニアリングの実践に重点を置いています。理論を研究する科学者になりたいのであれば、この記事はあなたには適していません。

4. 入門レベルの機械学習アルゴリズム

4.1 決定木

決定木はフローチャートに似たツリー構造です。各内部ノードは属性のテストを表し、各ブランチは属性の出力を表し、各リーフノードはクラスまたはクラス分布を表します。ツリーの最上位レベルはルート ノードです。

たとえば、ある人々の年齢、収入、学生かどうか、信用、コンピュータを購入するかどうかを表すデータ セットがあるとします。年齢には若年、中年、高齢者が含まれ、収入には高、中、低が含まれ、信用には平均と非常に良いが含まれます。データはAllElectronics.csvに保存されます。

今は新しい人(データ)がいて、この人がコンピュータを購入するかどうかを判断する必要があります。

  1. allElectronicsData = open (r 'D:\deeplearning\AllElectronics.csv' , 'rb' )
  2.  
  3. リーダー = csv.reader(allElectronicsData)
  4.  
  5. ヘッダー = reader.next ()  
  6.  
  7.  
  8. 印刷(ヘッダー)
  9.  
  10. 機能リスト = []
  11.  
  12. labelList = [] #最後の列 
  13.  
  14.  
  15. リーダーの場合:
  16.  
  17. #print(行)
  18.  
  19. labelList.append(row[len(row)-1]) #タプルの末尾に要素を追加します
  20.  
  21. 行ディクショナリ = {}
  22.  
  23. iが範囲(1,len(row)-1)内にある場合:
  24.  
  25. rowDict[ヘッダー[i]] = 行[i]
  26.  
  27. 機能リストに追加(rowDict)
  28.  
  29. print(機能リスト)
  30.  
  31. print(ラベルリスト)  
  32.  
  33.  
  34. vec = ディクトリベクター()
  35.  
  36. ダミーX = vec.fit_transform(featureList).toarray()
  37.  
  38. print( "ダミーX:" + str(ダミーX))
  39.  
  40. 印刷(vec.get_feature_names())  
  41.  
  42.  
  43. lb = 前処理.LabelBinarizer()
  44.  
  45. ダミーY = lb.fit_transform(ラベルリスト)
  46.  
  47. print( "ダミーY:" + str(ダミーY))  
  48.  
  49.  
  50.  
  51. clf = tree.DecisionTreeClassifier(基準 = 'エントロピー' )
  52.  
  53. clf = clf.fit(ダミーX、ダミーY)
  54.  
  55. print( "clf: " + str(clf))  
  56.  
  57.  
  58.   open ( "allElectronicInformationGainDri.dot" , 'w' )f:として開きます。
  59.  
  60. f = tree.export_graphviz(clf,feature_names=vec.get_feature_names(),out_file = f) #現在の作業ディレクトリに.dotファイルを生成します 
  61.  
  62.  
  63. 1行目X = ダミーX[0, :]
  64.  
  65. print( "oneRowx: " + str(oneRowX))  
  66.  
  67.  
  68. 新しい行X = 1行X
  69.  
  70.  
  71.  
  72. 新しい行X[0] = 1
  73.  
  74. 新しい行X[2] = 0
  75.  
  76. print( "newRowX: " + str(newRowX))  
  77.  
  78.  
  79. 予測Y = clf.predict(新しい行X)
  80.  
  81. print( "予測Y:" + str(予測Y))

4.2 最近傍サンプリング

最近傍サンプリングとは、既存のデータをいくつかのカテゴリに分割し、新しく入力されたデータと既知のデータとの距離を計算し、距離が近いカテゴリに新しいデータを分類することです。たとえば、下の図に示す映画分類では、映画の種類が不明な映画の最後の行は、喧嘩やキスの数に基づいて、ロマンチックタイプに近いため、ロマンチック映画として分類する必要があります。

例: irisdata.txtはインターネットからダウンロードしたアヤメのデータセットです。データセットに基づいて、新しいデータが分類されます。

  1. # コーディング:utf-8  
  2.  
  3.  
  4. #ライブラリを呼び出さずに、knnアルゴリズムを自分で実装する
  5.  
  6. import csv #CSVファイルを読み取るためのモジュール。データの読み取りに使用します
  7.  
  8. import random #乱数計算
  9.  
  10. import math #数学計算
  11.  
  12. インポート演算子
  13.  
  14. bokeh.util.session_idからランダムにインポート
  15.  
  16. boto.beanstalkからのインポートレスポンス
  17.  
  18. dask.array.learnから予測をインポート 
  19.  
  20.  
  21.  
  22. # データセットをロードします。ファイル名: データセットファイル名 split: データセット内の特定の位置をノードとして使用して、データセットをトレーニングセットとテストセットに分割します。
  23.  
  24. def loadDataSet(ファイル名、分割、トレーニングセット=[]、テストセット=[]):
  25.  
  26.   (ファイル名、 'rb' )を csv ファイルとして開きます:
  27.  
  28. lines = csv.reader(csvfile) #すべての行をlinesに保存します
  29.  
  30. dataset = list(lines) #データをリスト形式に変換します
  31.  
  32. x範囲(len(データセット)-1)内にある場合:
  33.  
  34. yが範囲(4)の場合:
  35.  
  36. データセット[x][y] = float (データセット[x][y])
  37.  
  38. if random.random() < split: #ランダム値がsplitより小さい場合
  39.  
  40. trainingSet.append(dataset[x]) #トレーニングセットに追加
  41.  
  42. それ以外
  43.  
  44. testSet.append(データセット[x])  
  45.  
  46.  
  47. #ユークリッド距離: 座標差の二乗の合計の平方根とマンハッタン距離
  48.  
  49. def euclideanDistance(インスタンス1、インスタンス2、長さ):
  50.  
  51. 距離 = 0
  52.  
  53. xが範囲(長さ)の場合:
  54.  
  55. 距離 += pow((インスタンス1[x] -インスタンス2[x]), 2)
  56.  
  57. math.sqrt(距離)を返す 
  58.  
  59.  
  60. #testInstance に最も近い trainingSet の K 近傍を返します
  61.  
  62. def getNeighbours(トレーニングセット、テストインスタンス、k):
  63.  
  64. 距離 = []
  65.  
  66. 長さ = len(テストインスタンス) - 1
  67.  
  68. xが範囲(len(trainingSet))の場合:
  69.  
  70. dist = euclideanDistance(testInstance, trainingSet[x], length) #各トレーニングセットデータとインスタンスデータ間の距離
  71.  
  72. 距離.append((トレーニングセット[x],dist))
  73.  
  74. distances.sort( key =operator.itemgetter(1)) #小さいものから大きいものへ並べ替え
  75.  
  76. #最初のk近傍を取得する
  77.  
  78. 隣人 = []
  79.  
  80. x範囲(k)内にある場合:
  81.  
  82. 近隣.append(距離[x][0])
  83.  
  84. 隣人を返す 
  85.  
  86.  
  87. #少数派が多数派に従うという原則に基づいて、予測するインスタンスがどのカテゴリに属する​​かを決定します。 trainingSet に最も近いインスタンスの数を計算し、インスタンスが最も多いインスタンスを返します。
  88.  
  89. def getResponse(近隣):
  90.  
  91. クラス投票 = {}
  92.  
  93. xrange(len(neighbors))内にある場合:
  94.  
  95. 応答 = 近隣[x][-1]
  96.  
  97. クラス投票応答の場合:
  98.  
  99. クラス投票[応答] += 1
  100.  
  101. それ以外
  102.  
  103. クラス投票[応答] = 1
  104.  
  105. sortedVotes = sorted(classVotes.iteritems(), key =operator.itemgetter(1), reverse= True ) です。
  106.  
  107. ソートされた投票を返す[0][0]  
  108.  
  109.  
  110. #予測精度を取得する testSet: テストデータセット predictions: コードによって予測されたカテゴリセット
  111.  
  112. def getAccuracy(テストセット、予測):
  113.  
  114. 正解 = 0
  115.  
  116. xが範囲(len(testSet))の場合:
  117.  
  118. if testSet[x][-1] == predictions[x]: #-1は配列の最後の値を示します。
  119.  
  120. 正解 += 1
  121.  
  122. 戻り値(正しい / float (len(testSet))) * 100.0  
  123.  
  124.  
  125. main() を定義します:
  126.  
  127. トレーニングセット=[]
  128.  
  129. テストセット=[]
  130.  
  131. 分割 = 0.67 #トレーニングセットに3分の2、データセットに3分の1
  132.  
  133. loadDataSet(r 'C:\Users\ning\workspace\KNNdata\irisdata.txt' 、split、trainingSet、testSet)
  134.  
  135. print 'Train Set: ' + repr(len(trainingSet)) #repr を文字列に変換
  136.  
  137. 'テストセット: ' + repr(len(testSet))を印刷します 
  138.  
  139.  
  140. 予測 = []
  141.  
  142. 3 = 3 です
  143.  
  144. xが範囲(len(testSet))の場合:
  145.  
  146. 近傍点 = getNeighbours(トレーニングセット、テストセット[x]、k)
  147.  
  148. 結果 = getResponse(近隣)
  149.  
  150. 予測.append(結果)
  151.  
  152. print( "> 予測値=" + repr(結果) + ', 実際=' + repr(テストセット[x][-1]))
  153.  
  154. accuarcy = getAccuracy(テストセット、予測)
  155.  
  156. print( '精度: ' + repr(精度) + '%' )
  157.  
  158. 主要()

4.3 サポートベクターマシン

サポートベクターマシン (SVM) は、線形分離可能なケースにおける最適な分類面から開発されます。最適な分類面では、分類線が 2 つのカテゴリを正しく分離できるだけでなく (トレーニング エラー率が 0)、分類間隔を最大化できることも必要です。

SVM は、分類要件を満たし、トレーニング セット内のポイントを分類面から可能な限り遠ざける超平面を見つけること、つまり、分類面の両側の空白領域 (マージン) を最大化する分類面を見つけることを検討します。

分類面に最も近く、最適な分類面に平行な超平面 H1 および H2 上にあるこれら 2 種類のサンプルのトレーニング サンプルは、サポート ベクターと呼ばれます。

例: sklearn ライブラリを使用して SVM アルゴリズムを実装することは、一般的にライブラリ チューニングと呼ばれます。実際、ライブラリ チューニングは非常に単純なプロセスであり、初期段階では原理を知る必要さえありません。

  1. # コーディング:utf-8
  2.  
  3. sklearnからsvmをインポート
  4.  
  5. X = [[2,0], [1,1], [2,3]]
  6.  
  7. y = [0,0,1]
  8.  
  9. clf = svm.SVC(カーネル = 'linear' )
  10.  
  11. clf.fit(X,y) #ͨサポートベクターマシンのすべてのパラメータは.fit関数を通じて計算され、clfに保存されます。   
  12.  
  13. clf を印刷する 
  14.  
  15.  
  16. # サポートベクターを取得する
  17.  
  18. clf.support_vectors_ を印刷する 
  19.  
  20.  
  21. #インデックスを取得 サポートベクター
  22.  
  23. clf.support_ を印刷する 
  24.  
  25.  
  26. #各クラスサポートベクター数を取得します
  27.  
  28. clf.n_support_ を印刷する 
  29.  
  30.  
  31. #予測データ、パラメータは2次元配列です
  32.  
  33. clf.predict([[2, 0], [10,10]]) を印刷する

5. 書籍リストの推奨

  • 数学の美しさ 呉俊著
  • 周志華による機械学習
  • 《人工知能について語る》 集志クラブ
  • ピーター・ハリントンによる機械学習の実践
  • Li Jiaxuan による「TensorFlow テクニカル分析と実践」
  • 統計的学習法 李航

<<:  開発者コンペティションロードショー | 12月16日、技術革新、北京でお会いしましょう

>>:  人工知能がリスク管理分野に参入すると、生身の人間は職を失うことになるのでしょうか?

ブログ    
ブログ    
ブログ    

推薦する

AutoML 2.0: データ サイエンティストは時代遅れか?

AutoML はここ数年で急速に成長しました。そして、景気後退が避けられない状況となった今、人工知...

...

...

世の中には、ほとんどコードを必要としない強力で古典的なアルゴリズムやプロジェクト事例にはどのようなものがありますか?

今日は、コードが非常に少ないけれども、非常にクールでクラシックな 4 つのアルゴリズムまたはプロジェ...

厳しい期限内で機械学習を行う方法: ラベル付きニュースの構築

[[195898]]翻訳者注: この記事では、著者と 3 人の友人がプログラミング マラソンに参加し...

ドローンによる配達は近づいているが、商業利用にはまだ問題点を解決する必要がある

都市から農村まで、わが国の宅配便や電子商取引企業がドローン物流と配達に注力したことで、国産ドローンの...

...

...

AIは製造業にどのように役立つのでしょうか?

AI を活用して製造効率を向上させ、インテリジェントな自動化で業界を変革します。製造業は人工知能技...

Google Cloud、パンデミック対策のAIモデル構築に向けCOVID-19データセットをリリース

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

AIの終末: 人間は本当の自己認識を持っていない

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

Jitu: 5秒でNeRFをトレーニングしましょう!オープンソース

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

BOE の革新的なテクノロジーは、国際的な氷上および雪上イベントを強化し、世界クラスのスポーツイベントをより華やかにします。

春の始まりの2月4日、世界の注目は北京に集まった。音楽、光、影が流れる中、オリーブの枝に囲まれた巨大...

AlphaFold2 は大きな貢献をしました!清華大学チームがディープラーニングでCOVID-19抗体を強化し、AIの画期的な成果を生み出す

2020年末、DeepMindが開発した第2世代ディープラーニングニューラルネットワークであるAlp...