간단한 설명
인터넷의 빠른 발전으로 A (AI) B (BigData) C (클라우드)가 현재 핵심 개발 방향이되었습니다. 세 가지가 깊이 결합되면 AI가 가장 핵심 부분입니다. 따라서 모든 사람이 미래 사회에서 프로그래밍을 배워야한다면 프로그래머에게는 인공 지능이 마스터 해야하는 기술입니다 (기술 개발은 정말 빠릅니다).
이 기사는 Java를 소개하고 사용하여 공식 도출과 엉키지 않고 가장 간단한 Perceptron 네트워크를 구현하고 신경망 학습에 대한 아이디어를 제공하고 신경망을 대략적으로 이해하는 것을 목표로합니다.
퍼셉트론 네트워크 모델 분석
먼저 사진을보십시오
신경망에 약간 관심이 있다면이 그림에 익숙해야합니다. 이 그림은 뉴런의 구조적 다이어그램입니다
x1 ~ xm은 입력을 나타내고, w1 ~ wm은 시냅스 중량을 나타내고, σ는 합산 노드를 나타내고, 활성화 함수는 활성화 함수를 나타내고, 결과를 출력합니다. 특정 프로세스는 다음과 같습니다
뉴런이 입력을 수신하면 각 입력에 상대 경로의 가중치가 곱해집니다. 합계 노드에 도달하면 합합 노드의 결과가 z로 설정됩니다.
z = x1 * w1 + x2 * W2 + x3 * W3 + ...... + xm * wm
그런 다음 이진 패턴 인식을 위해 z를 활성화 함수로 전달합니다 (여기서는 활성화 함수 f라고 함) : 이진 패턴 인식 :
F (x)> e, y = 1else y = -1e 인 경우 임계 값 Y는 분류 결과입니다.
여기서 f (x)의 값이 임계 값보다 크면 분류 y = 1이 얻어지고 그 반대로 y = -1을 볼 수 있습니다.
참고 : 생물학적 뉴런의 자극으로 표시된 반응과 비교하여, 자극이 허용 가능한 범위 내에 있으면, 뉴런은 자극을 억제하고 (y = -1), 범위를 초과하면이 범위의 유역은 임계 값 (e)입니다.
공부하다
우리는 무게와 임계 값이 고정되면이 신경망에는 의미가 없음을 발견했습니다. 따라서 학습 개념을 도입하고 신경망이 학습을 통해 무게와 임계 값을 수정하여 패턴 인식의 정확성을 동적으로 수정할 수 있도록했습니다. 이것이 기계 학습의 본질입니다.
그래서 배우는 방법? 사용하기 전에이 네트워크에 일련의 샘플 데이터를 제공해야합니다 (교사 모드로 배우기 위해 여기에서 가져옵니다) 샘플 데이터에는 입력 데이터 x 및 올바른 식별 결과 y '가 포함됩니다.
훈련 데이터 x를 입력하고 패턴 인식 Y를 얻을 때 y! = y '인 경우이 네트워크의 무게와 임계 값이 조정됩니다. 조정을 위해 공식을 참조하십시오. μ는 학습 속도 (보정 속도)를 나타내고 업데이트는 수정 필요성을 나타냅니다.
update = μ * (yi -y ') update = (f (x) -y') mς wi += update * xii = 1e += 업데이트
퍼셉트론 분류 결과가 올바른 분류와 같으면 업데이트 = 0이며 네트워크가 조정되지 않습니다. 올바른 분류와 같지 않은 경우 모든 가중치 (W) 및 임계 값 (e)이 조정됩니다.
위는 내가 소개 한 퍼셉트론의 가장 간단한 학습 과정입니다.
데이터 입력 -> 분류 결과를 기다리려면 활성화 기능을 통해 z-> 대기를 얻으려면 요약하십시오 -> 분류 결과는 올바른 결과와 일치하지 않으며 네트워크를 조정하십시오.
이 간단한 신경망을 구현합시다
Java 코드 구현
내가 여기서 구현 한 것은 신경망을 통해 정수의 긍정적이고 부정적인 것을 인식하는 법을 배우는 것입니다. 먼저, 먼저 퍼셉트론을 정의하는 클래스를 정의하십시오.
/*** Cimzzz가 12/2/17에 생성했습니다. **/public class perceptron {/*** 학습 속도*/private final float learnrate; / *** 학습 시간 수*/ 개인 최종 int 연구원; / *** 임계 값*/ private float e; / *** weight* 양의 정수와 음의 정수를 결정하기 위해 하나의 입력 만 필요하기 때문에 여기에는 하나의 무게 만 있으며 여러 입력은 배열*/ private float w로 설정할 수 있습니다. / *** 각 학습에 대한 올바른 속도*/ private float [] cortrectrate; /// ** * 생성자는 학습 속도, 학습 시간 수, 무게 및 임계 값이 0 * @Param LearnRate 학습 속도 (값 범위 0 <LearnRate <1) * @Param 학습 수치 수치 */ Public PercepTron (Float LearnRate, int StudyCount) {this.Lear = LEARTRATE; this.studycount = studyCount; this.e = 0; this.w = 0; this.correctrate = new float [StudyCount]; } / *** 학습 기능, 샘플은 입력 데이터 및 분류 결과를 포함하는 2 차원 배열입니다.* 샘플 [] [0]은 입력 데이터를 나타냅니다* 샘플 [] [1]은 올바른 분류 결과를 나타냅니다* @Param 샘플 교육 데이터* / public void fit (int [] 샘플) {int 샘플 플레어 = 샘플 길이; for (int i = 0; i <studyCount; i ++) {int errorCount = 0; for (int [] 샘플 : 샘플) {float update = LearnRate * (샘플 [1]-예측 (샘플 [0]); // 업데이트 중량 및 임계 값 W += 업데이트 * 샘플 [0]; e += 업데이트; // if (update! = 0) ERRORCOUNT ++ if IF IF IF IF IF IF IF IF IF IF IF IF IF IF IFER } //이 학습의 정확성을 올바르게 계산합니다 [i] = 1 -ErrorCount * 1.0f /samplelength; }} / *** 합 함수, 합산 노드 작동 입력 데이터 시뮬레이션* @param num 입력 데이터* @return sum 결과 z* / private float sum (int num) {return num* w + e; } / *** 결과 z 및 임계 값을 합산하여 함수, 판사 E* @param num 입력 데이터* @return classification result* / public int predict (int num) {return sum (num)> = 0? 1 : -1; }/*** 인쇄 정확도*/public void printcorrectrate () {for (int i = 0; i <연구원; i ++) system.out.printf ( " %d-> %. }}그런 다음 교육 데이터를 생성하는 기능을 작성하십시오
/*** 훈련 데이터 생성* @return 교육 데이터*/private static int [] [] genstudydata () {// 여기서 -100과 100 사이의 정수를 가져 가고 0보다 큰 정수를 모드 y = 1으로 설정합니다. 그렇지 않으면 y = -1 int [] data = new int [201] [2]; for (int i = -100, j = 0; i <= 100; i ++, j ++) {data [j] [0] = i; 데이터 [j] [1] = i> = 0? 1 : -1; } 반환 데이터; } /*** 교육 데이터 생성* @return training data* /private static int [] [] genstudydata2 () {// 여기서는 1 ~ 250 사이의 정수를 가져 가고 125보다 큰 경우 y = 1로 설정합니다. y = -1 int [] data = new int [250] [2]; for (int i = 1, j = 0; i <= 250; i ++, j ++) {data [j] [0] = i; 데이터 [j] [1] = i> = 125? 1 : -1; } 반환 데이터; }마지막으로, 주요 기능
공개 정적 무효 메인 (String [] args) {// 여기서 학습 속도와 훈련 시간은 상황에 따라 수동으로 조정할 수 있습니다. perceptron.fit (genstudydata ()); perceptron.printcorrectrate (); System.out.println (perceptron.predict (-1)); System.out.println (Perceptron.Predict (126)); }당신은 그것을 테스트 할 수 있습니다
한정
이 Perceptron Neural Network는 비교적 단순하며 1 차원 및 2 차원 좌표 사분면 분류의 양 및 음수와 같은 선형 분할 데이터에 적합합니다. 원수 찾기 등을 올바르게 분류 할 수없는 데이터는 분류 할 수 없습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.