신경망을 만드는 방법: 아키텍처, 매개변수 및 코드

게시 됨: 2021-02-12

신경망은 이름에서 알 수 있듯이 뉴런의 회로입니다. 다양한 유형의 신경망이 있습니다. 생물학적 신경망은 실제 생물학적 뉴런으로 구성됩니다. 반면 인공 신경망(ANN)은 뇌에 존재하는 생물학적 신경망을 기반으로 하는 시스템입니다. 뇌에 있는 뉴런의 추정 수는 약 1000억 개이며 전기화학적 신호를 통해 통신합니다.

ANN은 생물학적 뉴런에 존재하는 계산 복잡성을 재현하려고 시도하지만 그것만큼 비교할 수 없고 생물학적 신경망의 훨씬 간단하고 복잡하지 않은 버전입니다. 이 기사에서는 ANN의 구조를 이해하고 Python을 사용하여 신경망을 만드는 방법을 배웁니다.

목차

신경망 아키텍처

인공 신경망은 "노드"라고도 하는 인공 뉴런으로 구성됩니다. 이러한 노드는 네트워크 또는 메쉬가 생성되도록 서로 연결됩니다. 서로에 대한 이러한 연결의 강도에 값이 할당됩니다. 이 값은 -1에서 1 사이입니다.

연결 값이 높으면 해당 노드 간의 강력한 연결을 나타냅니다. 모든 노드에는 고유한 기능이 있습니다. 이 기능을 변경하면 신경망의 동작과 복잡성 특성이 변경됩니다. ANN에는 아래와 같이 입력 노드, 은닉 노드 및 출력 노드의 세 가지 유형의 뉴런이 있습니다.

원천

입력 노드는 일반적으로 숫자 값 또는 표현 형식의 정보를 수신하는 역할을 합니다. 정보는 활성화 값으로 표시되며 각 노드에 숫자가 부여될수록 숫자가 높을수록 활성화가 커집니다.
정보는 네트워크를 통해 추가로 전달됩니다. 특정 레이어의 특정 뉴런에 대한 노드 연결 가중치 및 활성화 함수를 기반으로 정보가 뉴런에서 뉴런으로 전달됩니다. 각 노드는 수신 시 활성화 값을 추가하고 값은 전달 함수를 기반으로 수정됩니다.
정보는 출력 노드에 도달할 때까지 숨겨진 계층을 통해 네트워크 전체에 흐릅니다. 출력 노드는 입력을 의미 있는 방식으로 외부 세계에 반영하기 때문에 매우 중요합니다. 여기에서 모든 레이어와 노드에 대한 가중치 조정으로 이어지는 신경망의 놀라운 측면을 볼 수 있습니다.

예측값과 실제값(오차)의 차이는 역방향으로 전파됩니다. 따라서 신경망은 오류에서 학습하고 지정된 학습률 접근 방식을 기반으로 가중치를 조정하려고 시도합니다.

따라서 은닉층의 수, 층당 뉴런 수, 가중치 업데이트 전략 및 활성화 함수와 같은 매개변수를 조정하여 신경망을 만들 수 있습니다.

매개변수 정의

활성화 기능

당면한 문제를 기반으로 신경망에서 사용할 수 있는 다양한 활성화 기능을 선택할 수 있습니다.

활성화 함수는 모든 뉴런이 가지고 있는 수학 방정식입니다. 신경망의 출력을 결정합니다.
이 활성화 함수는 네트워크의 모든 뉴런에 연결되어 특정 뉴런의 활성화가 출력 계층에서 관련 예측을 유도하는 데 도움이 되는지 여부를 기반으로 활성화해야 하는지 여부를 결정합니다. 다른 레이어에는 다른 활성화 기능이 첨부되어 있을 수 있습니다. 활성화 함수는 또한 각 뉴런의 출력을 1과 0 또는 -1과 1 사이의 범위로 정규화하는 데 도움이 됩니다.

최신 신경망은 역전파라는 중요한 기술을 사용하여 가중치를 조정하여 모델을 훈련시키며, 이는 활성화 함수와 파생 함수에 계산적 부담을 증가시킵니다.

활성화 함수의 작동
링크 누락

활성화 기능에는 3가지 유형이 있습니다.
이진법 - x<0 y=0 , x>0 y=1
선형- x=y
비선형 – 다양한 유형 : Sigmoid, TanH, Logistic, ReLU, Softmax 등

출처: 블로그

유형: ReLU
링크 누락

연산

신경망에는 여러 가지 유형이 있지만 흔히 피드포워드(feed-forward) 네트워크와 피드백(backpropagation) 네트워크로 나뉩니다.

1) 순방향 피드 네트워크는 입력, 출력 및 은닉 레이어를 포함하는 비반복 네트워크입니다. 신호가 한 방향으로만 이동할 수 있기 때문입니다. 입력 데이터는 계산을 수행하는 처리 장비 계층으로 전송됩니다. 각 처리 요소는 입력의 가중치를 기반으로 계산합니다. 새 값이 계산된 다음 새 입력 값이 다음 레이어에 제공됩니다.

이 과정은 모든 계층을 거쳐 결과를 결정할 때까지 계속됩니다. 한계 전달 함수는 때때로 출력 레이어의 뉴런 출력을 측정하는 데 사용됩니다. Feed Forward 네트워크는 Perceptron(직접 및 간접) 네트워크로 알려져 있으며 이를 포함합니다. Feed-forward 네트워크는 종종 데이터 마이닝에 사용됩니다.

2) 피드백 네트워크(예: 순환 신경망 또는 RNN)에는 트랩/루프를 사용하여 양방향으로 신호가 이동할 수 있는 소급 ​​메커니즘이 있습니다. 뉴런 간의 가능한 모든 통신이 허용됩니다.

이러한 유형의 네트워크에는 루프가 존재하기 때문에 안정적인 상태에 도달할 때까지 끊임없이 변화하는 비선형 시스템이 됩니다. 피드백 네트워크는 네트워크가 연결된 개체의 좋은 집합을 찾을 때 성능 문제와 관련된 메모리에 자주 사용됩니다.

훈련

피드포워드 패스는 입력이 주어지고 출력이 계산되는 방식에 가중치를 부여하는 것을 의미합니다. 훈련 완료 후 예측을 형성하기 위해 정방향 패스만 실행합니다.

그러나 우리는 먼저 가중치를 배우기 위해 모델을 훈련해야 하므로 훈련 절차는 다음과 같이 작동합니다.

  1. 모든 노드에 대한 가중치를 무작위로 선택하고 초기화합니다. TensorFlow 및 Keras(Python)에 내장된 스마트 초기화 방법이 있습니다.
  2. 모든 훈련 예제에 대해 현재 가중치를 사용하여 순방향 전달을 수행하고 왼쪽에서 오른쪽으로 가는 모든 노드의 출력을 계산합니다. 최종 출력은 마지막 노드의 값입니다.
  3. 최종 출력과 훈련 데이터 내의 실제 목표를 비교하고 손실 함수를 사용하여 오차를 측정합니다.
  4. 오른쪽에서 왼쪽으로 역방향 전달을 수행하고 backpropagation을 사용하여 마지막 단계에서 계산된 오류를 각 개별 노드에 전파합니다.
  5. 오류에 대한 각 뉴런의 가중치 기여도를 계산하고 경사하강법을 사용하여 그에 따라 연결 가중치를 조정합니다. 마지막 레이어부터 다시 오류 그라디언트를 전파합니다.

신경망용 Python 코드

신경망이 이론적으로 어떻게 만들어지는지 이해했으므로 Python을 사용하여 동일하게 구현해 보겠습니다.

Python의 신경망
우리는 신경망을 생성하기 위해 Tensorflow 또는 Theano 백엔드와 함께 Keras API를 사용할 것입니다.

라이브러리 설치
테아노
>>> pip install –upgrade –no-deps git+git://github.com/Theano/Theano.git

텐서플로우와 케라스
>>> pip3 텐서플로 설치
>>> pip install – 케라스 업그레이드

라이브러리 가져오기

수입 케라스
keras.models에서 가져오기 순차
keras.layers에서 Dense 가져오기

인공 신경망 초기화

모델 = 순차()

입력 및 숨겨진 레이어 생성-

model.add(Dense(input_dim = 2, 단위 = 10, activation='relu', kernel_initializer='uniform'))

이 코드는 입력 계층과 하나의 은닉 계층을 순차 네트워크에 추가합니다.
Dense(): 조밀하게 연결된 신경망을 만들 수 있습니다.
input_dim: 입력 레이어의 노드 모양 또는 개수
단위: 현재 레이어(숨겨진 레이어)에 있는 뉴런 또는 노드의 수
활성화: 각 노드에 적용되는 활성화 함수. "relu"는 Rectified Linear Unit을 나타냅니다.
kernel_initializer: 계층의 초기 임의 가중치

두 번째 은닉층
model.add(Dense(단위 = 20, 활성화='relu', kernel_initializer='uniform'))

이 코드는 20개의 노드와 '정류된 선형' 활성화 함수가 있는 모델에 또 다른 은닉층을 생성하고 추가합니다. 문제와 복잡성에 따라 유사한 방식으로 더 많은 레이어를 추가할 수 있습니다.

출력 레이어
model.add(Dense(units = 1, activation='sigmoid', kernel_initializer='uniform'))

Sigmoid 또는 softmax가 있는 단일 출력 레이어는 일반적으로 출력 레이어에 사용되는 활성화 함수입니다.

ANN 편집:
model.compile(optimizer='adam', loss='binary_crossentropy', 메트릭스=['accuracy'])

ANN은 훈련되기 전에 최적화 함수와 손실 함수로 컴파일됩니다.

Optimizer: 네트워크에 대한 옵티마이저 기능, 옵티마이저의 종류는 다양하며 주로 adam을 사용합니다.
손실: 손실 및 오류를 계산하는 데 사용됩니다. 다양한 유형이 있으며 선택은 처리되는 문제의 특성에 따라 다릅니다.
메트릭: 모델의 성능을 측정하는 데 사용되는 메트릭입니다.

모델을 훈련 데이터로 피팅:
model.fit(X_train,Y_train,batch_size=64, epochs=30)

이 코드는 모델을 생성합니다

결론

당면한 문제에 따라 변경할 수 있는 다양한 매개변수를 이해했기 때문에 이제 처음부터 인공 신경망(Python에서)을 만들 수 있습니다.

딥 러닝 기술 , 머신 러닝에 대해 자세히 알아보려면 작업 전문가를 위해 설계되었으며 450시간 이상의 엄격한 교육, 30개 이상의 사례 연구 및 과제, IIIT-B 동문 자격, 5개 이상의 실질적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.

세계 최고의 대학에서 ML 과정배우십시오 . 석사, 이그 제 큐 티브 PGP 또는 고급 인증 프로그램을 획득하여 경력을 빠르게 추적하십시오.

AI 주도 기술 혁명 주도

기계 학습 및 NLP 고급 인증 프로그램 신청