대뇌 신경 네트워크를 소개하다.회사 명
5511 단어 machinelearningjavascript
신경 네트워크가 뭐예요?
신경 네트워크는 매우 유용한 계산 구조로 컴퓨터가 복잡한 입력을 처리하고 이를 어떻게 분류하는지 배울 수 있다.신경 네트워크의 기능은 그 구조에서 나온다. 이 구조는 대뇌에서 발견된 모델을 바탕으로 한다.
네트워크는 세 개의 다른 층으로 나뉘어져 있음을 주의하십시오.신경 네트워크를 사용할 때, 그것은 왼쪽에서 오른쪽으로, 입력에서 출력으로 활성화됩니다.여러 개의 숨겨진 층이 존재할 수도 있지만, 우리는 잠시 후에 이 문제를 해결할 것이다.
위의 그림의 모든 원은 하나의 신경원이다.모든 신경원의 작업은 특정한 변수를 측정하는 것이다. 신경원이 있는 층이 높을수록 이 변수에 포함된 정보가 많아진다.입력 신경원은 단일 픽셀의 밝기를 측정할 수 있고 중간 신경원은 그림의 각 원소를 묘사할 수 있으며 출력 신경원은 전체 그림을 묘사할 수 있다.이 값은 특정 범위(예를 들어 0에서 1)에 적합한 숫자로 신경원 활성화라고 부른다.신경원에는 편차라고 불리는 두 번째 값이 하나 더 있는데, 이 값은 신경원의 기본값을 0.5에서 0.5로 변경한다.
한 층의 모든 신경원은 다음 층의 모든 신경원과 관련이 있다.모든 연결에는 하나의 권한이 있는데, 이 값은 두 신경원 간의 관계를 나타낸다.고도의 정권중은 첫 번째 신경원이 두 번째 신경원을 더욱 쉽게 활성화시키는 것을 의미하고, 고도의 부권중은 첫 번째 신경원이 두 번째 신경원의 활성화를 막는 것을 의미한다.권중이 0은 첫 번째 신경원이 두 번째 신경원에 절대 영향을 미치지 않는다는 것을 나타낸다.
입력 데이터가 신경 네트워크에 입력되면 1층에 활성화 값을 생성합니다.그런 다음 레이어의 각 연결은 순서대로 트리거됩니다.연결이 촉발되면 왼쪽 신경원의 활성화에 연결의 무게를 곱한 다음 편차와 함께 오른쪽 신경원의 운행 총수에 추가합니다.이 과정이 끝날 때 왼쪽 층의 모든 신경원은 오른쪽 층의 모든 신경원에 기여했다.
생성된 숫자는 숫자 줄의 어느 위치에 위치할 수 있고 활성화는 0과 1 사이여야 하기 때문에 함수를 사용하여 결과를 적당한 범위로 변환해야 합니다.Sigmoid와 같은 다양한 기능을 사용할 수 있습니다.일단 이 층의 모든 신경원에 활성화 값을 생성하면, 이 과정은 출력층에 도달할 때까지 반복된다.
예를 들어 아래의 상황에서 우리는 첫 번째 줄에서 세 개의 노드가 다음 줄의 한 노드에 기여한다.맨 위의 노드 공헌 4.0*0.5=2.0, 중간 노드 공헌 0.5, 밑 노드 공헌 1, 총 1.5입니다.영향을 받는 노드의 편차도 -2이기 때문에 총 편차는 -0.5이다.이 값을 Sigmoid 함수에 삽입하면 0.378 활성화 값이 발생합니다.
좋아, 우리는 약간의 수학이 있어, 우리로 하여금 몇 개의 숫자를 세척하게 하지만, 우리는 어떤 함수를 사용할 수 있다.왜 우리는 신경원, 연결, 층과 관련된 모든 업무를 필요로 합니까?
학습
신경 네트워크에는 미지수가 매우 많은데, 네트워크 중의 모든 신경원은 편차가 있고, 신경원 간의 모든 연결은 모두 중시할 권리가 있다.이 모든 값은 서로 다른 행동을 가진 신경 네트워크를 생성하기 위해 조정하고 수정할 수 있다.물론 이 가능한 조합 중 대다수는 우리에게 완전히 쓸모없는 답을 제공할 것이다.우리는 어떻게 무한한 가능한 조합에서 소수의 몇 개의 사용 가능한 집합 중 하나로 축소합니까?
우선, 우리는 주어진 신경 네트워크 설정의 성능을 판단하기 위해 몇 가지 방법을 정의해야 한다.이것은 원가 함수를 창설함으로써 실현된 것이다. 원가 함수는 보통 예상 답안과 실제 답안 사이의 차치의 제곱과 같다.원가 함수가 비교적 높을 때 네트워크가 좋지 않다.그러나 원가 함수가 0에 가까울 때 네트워크 운행은 양호하다.단지 네트워크가 하나의 샘플을 처리하는 능력이 그리 유용하지 않다는 것을 알기 때문에 이것이 바로 빅데이터 집합의 용무지이다.신경 네트워크를 통해 수백 개의 샘플을 운행하면 권중과 편차의 유효성을 확정할 수 있다.
만약 우리가 모든 가능한 매개 변수 값을 위해 원가 함수를 그린다면, 우리는 상술한 그림과 유사한 그림을 얻을 것이다.이것은 원가 함수이기 때문에 그림의 최저점은 가장 정확한 매개 변수 집합을 대표한다.따라서 우리는 최속 하강법으로 함수의 국부 극소값을 찾을 수 있다.가장 가파른 하강은 땅 부근 부분의 가장 높은 경사도를 찾아서 이 높이에서 옮기는 것을 포함한다.이것은 매우 많은 calculus I don’t have time to replicate here과 관련이 있는데, 속도가 매우 느리다.
역방향 전파로 학습 속도 향상
역방향 전파는 가장 가파른 하강과 비슷한 더 빠른 방법을 제공했다.배후의 관건적인 사상은 본질적으로 샘플을 신경 네트워크에 입력하여 답안이 예상치에서 벗어난 곳을 찾아내고 예상된 답안을 얻을 수 있는 최소한의 조정을 찾는 것이다.
신경 네트워크의 광범위한 분지 구조 때문에 이 과정은 실현될 수 있다.신경원은 이렇게 많은 서로 다른 경로를 통해 피드백을 하고 모든 경로에 서로 다른 권한이 있기 때문에 다른 경로보다 당신이 관심을 가지는 값에 더 큰 영향을 미치는 수량급 값을 찾을 수 있습니다.이 절차에 따라 기존 가중치와 편차 값에 대한 변경 목록이 생성됩니다.이러한 변경 사항만 적용하면 데이터 집합 훈련이 과도해지기 때문에 어떤 변경을 하기 전에 좋은 평균치를 얻어야 합니다.무작위로 분류된 샘플을 얻을 수 있도록 카드 데이터 집합을 씻어서 모든 샘플에 변경 목록을 만들어야 합니다.평균 수백 개의 목록이 있는 후에 네트워크를 변경할 수 있습니다.이로 인해 발생하는 모든 단독 전송은 가장 가파른 하락을 일으키지 않지만, 평균값은 결국 원가 함수를 국부 최소값으로 끌어올린다.
이론은 이미 충분하다!
Brain는javascript 라이브러리로 간단하고 고급 신경 네트워크에 사용됩니다.뇌는 거의 모든 설정을 처리해 주고 고위층의 결정만 걱정하게 한다.
비례 함수: 신경원 활성화 값을 확인하는 함수를 설정합니다.
숨겨진 레이어 수: 레이어와 출력 레이어 사이의 추가 레이어 수를 입력합니다.어떤 항목에도 두 개 이상의 층을 사용할 이유가 거의 없다.층수를 늘리면 계산 시간이 크게 증가한다.
교체 횟수: 네트워크가 멈추기 전에 훈련을 통해 데이터가 실행되는 횟수.
학습률: 얼마나 많은 값의 전역 표량을 조정할 수 있습니까?너무 낮아서 답을 수렴하는 데 시간이 오래 걸린다.너무 높으면 국부 최소치를 놓칠 수 있습니다.
const network = new brain.NeuralNetwork({
activation: ‘sigmoid’, //Sets the function for activation
hiddenLayers: [2], //Sets the number of hidden layers
iterations: 20000, //The number of runs before the neural net stops training
learningRate: 0.4 //The multiplier for the backpropagation changes
})
위의 매개변수는 NeuralNetwork 클래스에 객체로 전달됩니다.그리고 인터넷을 훈련시키는 데 사용할 수 있다.훈련 방법.이것은 준비된 교육 데이터가 필요하다.샘플 데이터는 입력과 출력 값이 있는 대상 그룹으로 구조화되어야 한다.입력과 출력 값은 네트워크 1층과 마지막 신경원의 활성화 값에 대응하는 디지털 수조이어야 한다.중요한 것은 입력과 출력 패턴의 요소 수가 일치하는 것을 유지하는 것이다. (내부적으로는 서로 같을 필요가 없다.) 왜냐하면 이것은 네트워크 전층과 후층에 존재하는 노드의 수를 결정하기 때문이다.let trainingSample1 = {
input: [ 5.3, 6 , 1 , -4 ]
output: [ 0 , 1 ]
}
let trainingSample2 = {
input: [ 1 , -14 , 0.2 , 4.4 ]
output: [ 1 , 1 ]
}
trainingData.push( trainingSample1 )
trainingData.push( trainingSample2 )
network.train(trainingData)
현재 인터넷은 당신이 선택한 설정과 샘플 아래에서 자체 훈련을 하기 위해 최선을 다했습니다.지금 사용할 수 있습니다.명령을 실행하여 주어진 견본의 출력을 검사합니다.봐라, 너의 네트워크는 어떤 주어진 입력에 근거하여 근사할 수 있을 것이다.만약 네가 1000개의 단어를 읽어서 그것의 작업 원리를 설명하는 것이 아니라면, 나는 이것이 마치 마술과 같다고 말할 것이다. let sample = [20, -3, -5, 13]
let result = network.run(sample)
Reference
이 문제에 관하여(대뇌 신경 네트워크를 소개하다.회사 명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nwdunlap17/introduction-to-neural-networks-with-brain-js-4i80텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)