리소스 로딩... 로딩...

재미있는 기계 학습: 가장 간단한 소개 가이드

저자:발명가들의 수량화 - 작은 꿈, 2016-12-07 12:37:21, 업데이트: 2016-12-07 12:40:26

재미있는 기계 학습: 가장 간단한 소개 가이드


사람들이 기계 학습에 대해 이야기하는 것을 들었을 때, 당신은 그것이 무엇을 의미하는지 모호하게 인식하고 있습니까? 당신은 동료들과 대화를 할 때 계속 머리를 끄덕이는 것에 지쳤습니까?

이 가이드의 독자는 기계 학습에 대한 호기심을 가지고 있지만 어떻게 시작해야할지 모르는 모든 친구입니다. 저는 많은 사람들이 기계 학습에 대한 위키백과 문장을 읽고 아무도 높은 수준의 설명을 줄 수 없다고 생각하며 좌절감을 느꼈을 것이라고 생각합니다. 이 문서는 당신이 원하는 것입니다.

이 글의 목표는 쉽게 접근할 수 있다는 것이고, 이는 많은 포괄적인 내용이 있다는 것을 의미합니다. 하지만 누가 신경쓰는가?

  • 왜 기계 학습이 필요한가?

    머신러닝의 개념은 풀어가고 있는 문제에 대해 특별한 프로그램 코드를 작성할 필요가 없으며, 유전 알고리즘은 데이터 세트에서 당신에게 흥미로운 답을 얻을 수 있다고 주장합니다. 유전 알고리즘은 코드를 입력하지 않고 데이터를 입력합니다. 그것은 데이터 위에 자신의 논리를 구축합니다.

    예를 들어, 분류 알고리즘이라고 불리는 알고리즘은 데이터를 다른 그룹으로 분류할 수 있습니다. 손으로 쓴 숫자를 식별하는 분류 알고리즘은 코드 한 줄을 수정하지 않고 이메일을 스팸과 일반 메일로 분류할 수 있습니다. 알고리즘은 변하지 않지만 입력된 훈련 데이터가 변하므로 다른 분류 논리를 얻습니다.

    img

    머신러닝 알고리즘은 블랙박스로서 다양한 분류 문제를 해결할 수 있습니다.

    기계 학습 은 많은 유사한 유전 알고리즘을 포함하는 포괄적인 용어이다.

  • 두 종류의 기계 학습 알고리즘

    머신러닝 알고리즘은 두 가지로 나눌 수 있습니다. 감독 학습 (Supervised Learning) 과 감독되지 않은 학습 (Unsupervised Learning). 둘의 차이점은 간단하지만 매우 중요합니다.

    • 감독된 학습

      만약 당신이 부동산 중개인이고 사업이 커질수록 많은 인턴들을 고용하게 된다면, 문제가 생깁니다. 그러나 인턴들은 경험도 없고, 어떻게 평가해야 할지 모릅니다.

      실습생들을 돕기 위해 (아마도 휴가를 보내기 위해) 당신은 작은 소프트웨어를 작성하기로 결정했습니다. 이 소프트웨어는 주택의 크기와 지점, 그리고 비슷한 주택의 거래가 가능한 가격 등의 요소에 따라 당신의 지역의 주택의 가치를 평가할 수 있습니다.

      3개월 동안 도시 내의 모든 주택 거래를 기록하고, 방의 수, 주택의 크기, 토지 등에 대한 긴 세부사항을 기록하고 있습니다.

      이 자료는 우리 훈련 데이터 입니다.

      img

      우리는 이 훈련 데이터를 사용하여 이 지역의 다른 주택의 가치를 추정하는 프로그램을 작성하고자 합니다.

      img

      이것은 감시 학습이라고 불립니다. 여러분은 이미 모든 주택의 판매 가격을 알고 있습니다. 즉, 여러분은 질문에 대한 답을 알고 있으며, 그 답을 찾아내는 논리를 역으로 찾을 수 있습니다.

      소프트웨어를 작성하기 위해, 당신은 각 부동산의 훈련 데이터를 포함하고 있는 당신의 기계 학습 알고리즘에 입력합니다. 알고리즘은 어떤 연산을 사용하여 가격 숫자를 도출해야 하는지 알아내려고 합니다.

      이것은 마치 수학 실습과 같고, 연산의 모든 연산 기호가 지워집니다.

      img

      이 학생이 선생님들의 답에서 수학 기호를 완전히 지워버렸어요.

      이 질문들을 보면, 이 시험들이 어떤 수학 문제들을 가지고 있는지 알 수 있을까요? 여러분은 계산의 왼쪽 숫자줄에 무슨 일이 일어나야 하는지 알고 있습니다.

      감독 학습에서는 컴퓨터가 숫자를 계산하도록 합니다. 일단 이런 특정한 문제를 해결하기 위해 필요한 수학 방법을 알게 되면, 같은 종류의 다른 문제를 해결할 수 있습니다.

    • 무감독 학습

      초기의 부동산 중개인의 예로 돌아가 보겠습니다. 만약 여러분이 집 하나하나의 가격에 대해 알지 못한다면, 집 크기와 위치 등의 정보만 알고 있으면도 멋진 것들을 만들 수 있습니다. 이것이 바로 비감독 학습이라고 합니다.

      img

      여러분이 모르는 데이터를 예측하는 것이 아니더라도 (예를 들어 가격) 기계 학습을 통해 재미있는 일을 할 수 있습니다.

      이것은 마치 누군가가 당신에게 많은 숫자를 적고 있는 종이를 주면서 이렇게 말하는 것과 같습니다. "이 숫자들이 무엇을 의미하는지 모르겠지만, 어쩌면 당신은 그 숫자를 통해 법칙을 찾아낼 수 있을지도 모릅니다. 또는 그것들을 분류할 수 있을지도 모릅니다.

      이 데이터를 어떻게 처리해야 할까요? 첫째, 알고리즘을 사용하여 데이터에서 다른 세그먼트를 자동으로 구분할 수 있습니다. 아마도 대학 근처의 주택 구매자가 작은 방으로 많은 침실을 선호하는 반면, 교외에있는 주택 구매자가 3개의 침실을 선호하는 것을 알게 될 것입니다. 이 정보는 귀하의 마케팅에 직접 도움이 될 수 있습니다.

      또한 멋진 일을 할 수 있습니다. 자동으로 집값의 부각 데이터를 찾아낼 수 있습니다. 즉, 다른 데이터와 다른 값들을 찾아낼 수 있습니다. 이 정형 집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집집

      이 글의 나머지 부분에서 우리는 주로 감독된 학습에 대해 이야기하지만, 감독되지 않은 학습이 쓸모가 없거나 전혀 맛이 없다는 것은 아닙니다. 사실, 알고리즘이 개선됨에 따라 데이터와 올바른 답을 연결할 필요가 없기 때문에 감독되지 않은 학습은 점점 더 중요해지고 있습니다.

      다른 많은 종류의 기계 학습 알고리즘도 있습니다. 하지만 초등학생들에게는 이해가 좋습니다.

      정말 멋지지만, 주택 가격을 평가하는 것은 정말 공부하는 요법이라고 볼 수 있을까?

      인간으로서, 당신의 뇌는 대부분의 상황을 처리할 수 있고, 어떤 명확한 지시도 없이 어떻게 처리해야 하는지 배울 수 있다. 만약 당신이 부동산 중개인으로서 오랫동안 일한다면, 당신은 부동산의 적절한 가격, 가장 좋은 마케팅 방법, 어떤 고객이 관심을 가질 수 있는지 등에 대한 직관적인 감각을 갖게 될 것이다. 강한 인공지능 연구의 목표는 컴퓨터로 이 능력을 복제할 수 있는 것이다.

      그러나 현재 기계 학습 알고리즘은 매우 특정, 제한된 문제에만 집중할 수 있기 때문에 아직 그렇게 좋지 않습니다. 아마도 이 경우, 학습 알고리즘의 더 적합한 정의는 작은 사례 데이터에 기초하여 특정 문제를 해결하기 위해 방정식을 찾는 것입니다.

      불행히도, 기계는 작은 사례 데이터에 기초하여 특정 문제를 해결하기 위해 방정식을 찾습니다. 의 이름은 너무 나쁘습니다. 그래서 우리는 결국 기계 학습으로 을 대체했습니다.

      물론 50년 후에 이 글을 읽으면, 우리는 강력한 인공지능 알고리즘을 만들어냈을 것이고, 이 글은 오래된 것 처럼 보일 것입니다. 미래 인류, 당신은 아직 읽지 않고, 당신의 기계 종에게 샌드위치를 만들어달라고 요청하십시오.

      우리는 이 모든 것을 할 수 있습니다.

      이전 예제에서 주택 가격을 평가하는 절차를 어떻게 작성할 계획입니까? 아래로 내려가기 전에 먼저 생각하십시오.

      만약 여러분이 머신러닝에 대해 전혀 모르는 사람이라면, 아마도 여러분은 주택 가격을 평가하기 위한 몇 가지 기본 규칙을 작성하려고 할 것입니다.

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = 0
          # In my area, the average house costs $200 per sqft
          price_per_sqft = 200
      
          if neighborhood == "hipsterton":
          # but some areas cost a bit more
              price_per_sqft = 400
      
          elif neighborhood == "skid row":
          # and some areas cost less
              price_per_sqft = 100
      
          # start with a base price estimate based on how big the place is
          price = price_per_sqft * sqft
      
          # now adjust our estimate based on the number of bedrooms
          if num_of_bedrooms == 0:
          # Studio apartments are cheap
              price = price — 20000
          else:
          # places with more bedrooms are usually
          # more valuable
              price = price + (num_of_bedrooms * 1000)
      
          return price
      

      만약 당신이 이렇게 몇 시간 동안 바쁘게 일한다면 약간의 성과를 낼 수 있을지도 모르지만, 당신의 과정은 결코 완벽하지 않을 것이고, 가격이 변할 때 유지하기가 어려울 것입니다.

      만약 컴퓨터가 위의 함수의 기능을 구현하는 방법을 찾아낼 수 있다면 더 낫지 않을까요?

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = <computer, plz do some math for me>
          return price
      

      이 문제를 고려하는 한 가지 관점은 집값을 맛있는 의 그릇과 같은 것으로 간주하는 것입니다. 의 구성 요소는 침실 수, 면적 및 장소입니다. 만약 당신이 각 구성 요소가 최종 가격에 얼마나 큰 영향을 미치는지 계산할 수 있다면, 아마도 다양한 구성 요소가 혼합되어 최종 가격을 형성하는 특정 비율을 얻을 수 있습니다.

      이 방법은 원래의 프로그램 (이 모든 것이 미친 if else 문장) 을 다음과 같이 단순화 할 수 있습니다.

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = 0
      
          # a little pinch of this
          price += num_of_bedrooms * .841231951398213
      
          # and a big pinch of that
          price += sqft * 1231.1231231
      
          # maybe a handful of this
          price += neighborhood * 2.3242341421
      
          # and finally, just a little extra salt for good measure
          price += 201.23432095
      
          return price
      

      두꺼운 글자로 표시된 신비한 숫자 .841231951398213, 1231.1231231, 2.3242341421, 그리고 201.23432095에 주의하십시오. 그것들은 무게라고 불립니다. 만약 우리가 모든 에 적용되는 완벽한 무게를 찾을 수 있다면 우리의 함수는 모든 주택 가격을 예측할 수 있습니다!

      가장 좋은 무게를 찾는 가장 좋은 방법은 다음과 같습니다.

      첫 번째 단계

      먼저 각 무게를 1.0로 설정합니다.

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = 0
      
          # a little pinch of this
          price += num_of_bedrooms * 1.0
      
          # and a big pinch of that
          price += sqft * 1.0
      
          # maybe a handful of this
          price += neighborhood * 1.0
      
          # and finally, just a little extra salt for good measure
          price += 1.0
      
          return price
      

      2단계:

      각 부동산에 대해 당신의 함수 계산에 가져와 평가값과 올바른 가격의 오차를 확인합니다:

      img

      이 프로그램은 주택 가격을 예측하는 데 사용됩니다.

      예를 들어, 위의 표의 첫 번째 부동산의 실제 거래 가격은 25만 달러이고, 당신의 함수 평가는 17만 8천 달러이며, 당신은 이 부동산의 7만 2천 달러를 잃습니다.

      다음으로, 데이터 세트의 각 집합의 부동산 평가격차의 제곱을 합시다. 데이터 세트에는 500개의 부동산 거래가 있다고 가정하고, 집합의 부동산 평가격차의 제곱을 합하면 86,123,373달러가 됩니다. 이것은 당신의 함수의 현재 부각의 올바른 부각을 반영합니다.

      이제, 500로 나누면 각 집합에 대한 추정값의 오차 평균을 얻습니다. 이 평균 오차값을 당신의 함수의 비용이라고 부릅니다.

      만약 당신이 그 값을 0으로 가중치를 조정할 수 있다면, 당신의 함수는 완벽합니다. 그것은 입력된 데이터에 따라 당신의 프로그램이 모든 부동산 거래에 대해 동일한 평가를 할 수 있다는 것을 의미합니다. 그리고 이것이 우리가 원하는 것입니다. 다른 무게를 시도하여 비용을 최대한 낮게 만드는 것입니다.

      세 번째 단계:

      단계 2를 반복해서 가능한 모든 무게가치 조합을 시도하십시오. 어떤 조합이 비용을 0에 가장 가깝게 만들지, 그것은 당신이 사용할 것입니다. 당신이 그런 조합을 찾으면 문제가 해결됩니다!

      생각이 시간을 방해합니다.

      너무 간단하지 않나요? 방금 한 일에 대해 생각해보세요. 당신은 몇 가지 데이터를 얻었고, 그것을 세 가지 일반적인 간단한 단계로 입력했습니다. 그리고 마지막으로 당신은 당신의 지역의 주택을 평가 할 수있는 함수를 얻었습니다. 그러나 다음의 사실이 당신의 생각을 혼란스럽게 할 수 있습니다:

      • 1. 지난 40년 동안 많은 분야 (언어학/번역학 등) 에서 연구된 바에 따르면, 이러한 일반적인 진동 데이터 (내가 만든 단어) 같은 학습 알고리즘은 실제 사람을 이용한 명확한 규칙을 필요로 하는 방법을 능가하고 있다. 기계 학습의 방식은 결국 인간 전문가들을 물리치고 있다.

      • 2.你最后写出的函数真是笨,它甚至不知道什么是“面积”和“卧室数”。它知道的只是搅动,改变数字来得到正确的答案。

      • 3.很可能你都不知道为何一组特殊的权重值能起效。所以你只是写出了一个你实际上并不理解却能证明的函数。

      • 4.试想一下,你的程序里没有类似“面积”和“卧室数”这样的参数,而是接受了一组数字。假设每个数字代表了你车顶安装的摄像头捕捉的画面中的一个像素,再将预测的输出不称为“价格”而是叫做“方向盘转动度数”,这样你就得到了一个程序可以自动操纵你的汽车了!

      정말 미쳤어요, 그렇죠?

      단계 3의 은 각각의 숫자를 시도합니다.

      자, 물론 당신은 가능한 모든 무게값을 시도하여 가장 좋은 조합을 찾을 수 없습니다. 그것은 시간이 오래 걸릴 것입니다. 왜냐하면 시도해야 할 숫자가 무한할 수 있기 때문입니다. 이러한 상황을 피하기 위해, 수학자들은 좋은 무게값을 빨리 찾아내기 위해 많은 똑똑한 방법을 찾았습니다. 먼저, 간단한 방정식을 써서 2단계를 나타냅니다.

      이것은 당신의 비용 함수입니다.

      img

      다음으로, 같은 방정식을 기계 학습의 수학 용어로 다시 써보겠습니다. (지금은 무시할 수 있습니다.)

      θ는 현재 중량값을 나타냅니다. J ((θ) 는?? 의 현재 중량값에 대응하는 가격을 나타냅니다.

      img

      이 방정식은 우리의 평가 프로그램에서 현재 중량값에 따른 오차의 크기를 나타냅니다.

      방의 수와 면적에 부여된 모든 가능한 무게값을 그래프로 표시하면 아래와 같은 그래프를 얻을 수 있습니다.

      img

      비용 함수의 그래프는 그릇과 같습니다.

      이 그래프의 파란색 최저점은 가장 낮은 비용의 장소입니다. 즉, 우리의 프로그램이 가장 작은 편차를 가지고 있습니다. 가장 높은 점은 가장 큰 편차를 의미합니다. 그래서, 우리가 그래프의 가장 낮은 위치를 찾을 수 있다면, 우리가 그 자리에 도달하는 무게의 집합을 찾을 수 있다면, 우리는 답을 얻습니다!

      img

      따라서 우리는 무게중심을 조정하는 것만으로도 그래프에서 가장 낮은 지점으로 갈 수 있는 경사로를 갈 수 있다. 무게에 대한 작은 조정력이 계속 우리를 최저 지점으로 움직이게 한다면 결국 우리는 너무 많은 무게중심을 시도하지 않고 거기에 도달할 수 있다.

      만약 여러분이 미적분학을 조금만 기억한다면, 여러분은 아마도 만약 여러분이 어떤 함수에 대해 쿼리를 한다면, 그 결과가 어떤 점의 기울기를 알려줄 것을 기억할 것입니다. 즉, 그래프에 주어진 점에 대해, 그것은 우리에게 그 길이 내리막길이라고 알려줍니다. 우리는 이 점을 이용하여 아래로 나아갈 수 있습니다.

      따라서, 만약 우리가 비용 함수에 대해 각 무게에 대해 편향을 가한다면, 우리는 각 무게에서 그 값을 수 있습니다. 그래서 우리는 산 밑에 더 가까이 갈 수 있습니다. 계속 그렇게 하면 결국 바닥에 도달하고 무게의 우수 값을 얻을 것입니다. (읽지 못하면 걱정 마세요, 아래로 읽으십시오.)

      최적의 무게를 찾는 방법은 부피 경사 하락이라고 불리며, 그 높이에 대한 포괄적 설명이 있습니다. 세부 사항을 이해하려면 두려워하지 마십시오.http://hbfs.wordpress.com/2012/04/24/introduction-to-gradient-descent/(웃음)

      실제 문제를 해결하기 위해 기계 학습 알고리즘 라이브러리를 사용할 때 모든 것이 준비되어 있습니다. 그러나 구체적인 세부 사항을 이해하는 것이 항상 유용합니다.

      다른 어떤 것을 그냥 간과하셨나요?

      위에서 설명한 3단계 알고리즘은 다선적 회귀라고 불립니다. 당신은 집값의 모든 데이터 포인트에 맞게 될 수 있는 직선을 구하는 방정식을 추산합니다. 그리고 당신은 그 방정식을 사용하여 집값이 당신의 직선에서 나타날 수 있는 위치에 따라 본 적이 없는 집값을 추산합니다. 이 아이디어는 강력하고 실제 집값 문제를 해결하는 데 사용할 수 있습니다.

      하지만 제가 보여드리는 방법은 간단한 경우에 효과가 있을 수 있지만 모든 경우에 효과가 없을 것입니다. 한 가지 이유는 주택 가격이 항상 연속적인 직선을 따라가지 않기 때문입니다.

      그러나, 다행히도, 이러한 상황을 처리할 수 있는 많은 방법이 있다. 비선형 데이터에 대해서는 많은 다른 유형의 기계 학습 알고리즘이 처리될 수 있다. 또한 선형 회귀를 보다 유연하게 적용하고, 더 복잡한 선으로 조정할 수 있는 많은 방법이 있다. 모든 경우에, 최우수 중중치를 찾는 기본 아이디어는 여전히 적용된다.

      또한, 나는 과대 적합성의 개념을 무시했다. 그것은 당신의 원본 데이터 세트에 있는 주택 가격에 대해 완벽하게 예측할 수 있는 무게가량 집합을 쉽게 만나지만 원본 데이터 세트 이외의 모든 새로운 주택에 대해 예측할 수 없습니다. 이 상황에 대한 해결책도 많이 있습니다 (예: 정형화 및 크로스 검증 데이터 세트를 사용하는 것) 이 문제를 처리하는 방법을 배우는 것은 기계 학습을 원활하게 적용하는 데 중요합니다.

      즉, 기본 개념은 매우 간단하며, 유용한 결과를 얻기 위해 기계 학습을 사용하는 데는 몇 가지 기술과 경험이 필요합니다. 그러나 이것은 모든 개발자가 배울 수있는 기술입니다.

    • 기계 학습의 힘은 무한한가?

      일단 기계 학습 기술을 어렵게 보이는 문제를 해결하기 위해 쉽게 적용할 수 있다는 것을 알게 되면 (예: 필기 인식) 충분한 데이터가 있으면 기계 학습을 통해 모든 문제를 해결할 수 있다는 느낌을 갖게 됩니다.

      하지만 기억해야 할 중요한 점은 기계 학습은 실제로 당신이 가지고 있는 데이터로 해결할 수 있는 문제에만 적용된다는 것입니다.

      예를 들어, 만약 여러분이 집마다 얼마나 많은 자생물을 가지고 있는지에 따라 집값을 예측하는 모델을 만들면, 그것은 결코 성공하지 못할 것입니다. 집 안에 있는 자생물의 수와 집값 사이에 아무런 관계가 없습니다. 그래서, 아무리 노력해도 컴퓨터는 둘 사이의 관계를 추론할 수 없습니다.

      img

      당신은 단지 실제로 존재하는 관계를 모델링할 수 있습니다.

    • 기계 학습을 어떻게 할 수 있을까요?

      저는 현재 기계 학습에 대한 가장 큰 문제는 그것이 주로 학계와 비즈니스 연구 조직에서 활발하게 활동하고 있다는 것입니다. 전문가가 되고 싶어하지 않고 전반적인 지식을 얻고 싶어하는 외부 사람들에게는 쉽게 이해할 수 있는 학습 자료가 많지 않습니다. 그러나 이 상황은 매일 개선되고 있습니다.

      앤드류 Ng 교수님의 Coursera에서 제공하는 무료 기계 학습 코스는 매우 좋습니다. 저는 이것을 적극적으로 추천합니다. 컴퓨터 과학 학위를 가진 사람이나 수학을 조금 기억하는 사람이라면 누구나 이해할 수 있습니다.

      또한 SciKit-Learn을 다운로드하여 설치하여 수천 개의 기계 학습 알고리즘을 테스트할 수 있습니다. 그것은 모든 표준 알고리즘에 대한 블랙박스 버전이 있는 파이썬 프레임워크입니다.

파이썬 개발자로부터 전송


더 많은

오클루오쿼안이 예는 다 교수가 새로운 수업을 시작할 때마다 반복하는 예입니다.

열차왜 2m가 되었을까요? 왜 2m가 2m가 되었을까요?