RSNNS - 7.Neural network packages in R

Neural Networks in R Using the Stuttgart Neural Network Simulator: RSNNS



7. Neural network packages in R

이 절에서, 우리는 R에서 또는 CRAN으로 부터 직접 사용 가능한 패키지를 재확인한다, 신경망 그리고 RSNNS을 통해 사용 가능한 알고리즘을 가지고 그들의 기능을 비교. feed-forward networks 이든 Kohonen networks (LVQ, SOM) 이든 CRAN 구현에서 우리가 인지하는 모든 신경망 패키지로, 우리는 이 장에서 적절하게 묶여진 패키지를 논의한다. 게다가, 우리는 R에서 RSNNS를 통해 이용가능하게 되는 기능에 대해 일반적인 논의를 한다, 그리고 SNNS 그리고 래퍼 패키지(wrapper package) 둘 모두에서 일반적인 제약.
SNNSR 사이에 연결을 추적하는 CRAN에서 표현된 하나의 패키지는 write.snns (Castej on Limas et al. 2007) 이다, R에서 SNNS 패턴 파일(.pat)로 내보내는 함수를 구현. 이 기능은 RSNNS에 포함되었다, 패턴 파일의 입력과 출력을 위한 원본 SNNS 함수를 직접 사용.

7.1. Feed-forward neural networks

다-층 퍼셉트론을 구현하는 R에서 몇 개의 패키지가 있다. 게다가, 정량적 회귀 신경망(quantile regression neural networks) 그리고 유연한 방사 기저 함수 망(flexible radial basis function networks)가 구현되어 있음.
nnet 피키지 nnet (Venables and Ripley 2002)은 일반적으로 R에서 직접 적재하는 추천하는 R 패키지의 일부이다. 그래서, nnet는 R 표준 신경망으로 고려할 수 있다. 그것은 하나의 숨김 층(hidden layer)을 가지는 다-충 퍼셉트론을 구현한다. 가중치 조정을 위해, 그것은 그것의 변형이 아닌 역전파(backpropagation)를 사용하지 않는다, 그러나 일반적인 준-뉴턴(quasi-Newton) 최적화 절차, BFGS 알고리즘. 리플리(Ripley, 2007)는 "불확실한 최적화에서 일반 알고리즘 사용 [...] 가장 유익한 방법으로 보인다"라고 주장했다. 비슷한 방법, 척도화를 결합한 기울기 (scaled conjugate gradient: SCG, MΦller 1993), SNNS에서 구현되었다. SCG는 레벤베르그-마르카토(Levenberg-Marquardt) 알고리즘의 사상을 가지고 결합 기울기 접근을 결합했다. 모일러는 표준 역전파를 가지고 SCG를 비교했다, 다른 결합 기울기 알고리즘, 그리고 BFGS 알고리즘. 그의 비교에서, SCG가 최고의 성능을 보였다.
AMORE 패키지 AMORE (Castej on Limas et al. 2010)는 "TAO-강건한 역전파 학습 알고리즘(TAO-robust backpropagation learning algorithm)"을 구현했다(Pern a Espinoza et al. 2005), 데이터에서 이상치에 대해 강건하게 설계된 역전파 학습 알고리즘. 게다가, 적응 역전파(adaptive backpropagation) 그리고 운동량 조건을 가지는 적응 역전파(adaptive backpropagation), 온라인과 배치 버전(batch versions) 둘 모두에서, 구현되었다. 알고리즘은 각 유닛에서 개별적인 학습 비를 사용한다. 적응 역전파 프로시저를 SNNS에서는 이 방법으로 구현되지 않았다, 그러나 유닛에서 다른 학습 비 또는 가중치의 사용은 신경망 학습 프로시저를 향상시기키 위한 일반적인 사상이다, 그리고 e.g., 탄력적인 역전파(resilient backpropagation)는, SNNS에서 구현됨, 각 가중치로 학습비를 적용한다.
게다가, 패키지는 신경망의 구현을 위해 일반적인 프레임워크 제공에 목적이 있다 (http://rwiki.sciviews.org/doku.php?id=packages:cran:amore), i.e., 유닛을 정의하기 위해, 그들의 활성화 함수, 연결, 등. SNNS 커널 인터페이스는 SNNS에서 구현된 알고리즘으로 내부적으로 사용되는 구조처럼 구현되었다.
neuralnet 패키지 neuralnet (Fritsch et al. 2010)은 표준 역전파 그리고 2개의 탄력적인 역전파(Riedmiller and Braun 1993; Riedmiller 1994)를 구현했다. 이런 알고리즘은 SNNS에서 또한 사용할 수 있다, 알고리즘의 원본 저자의 구현으로. 게다가, 패키지는 Anastasiadis et al. (2005)에 의해 제공된 "변경된 전역 수렴 알고리즘 버전(modified globally convergent version of the algorithm)"를 구현한다, 그리고 "일반화 가중치의 계산(the calculation of generalized weights)"을 위한 방법, SNNS에는 표현되지 않음.
monmlp 패키지 monmlp (Cannon 2011a)는 부분 단순성 제약(partial monotonicity constraints, Zhang and Zhang 1999)을 가지는 다-층 퍼셉트론을 구현했다. 알고리즘은 입력과 출력 간의 단순한 관계의 정의를 허용한다, 훈련하는 동안 기대되는 어떤 것. 만약 제약이 정의되지 않았다면, 알고리즘은 보통으로 수행한다, 비제약된 버전. 표준 역전파로 구현, 그리고 비선형 최소 제곱 옵티마이저(optimizer)를 사용하는 학습. 게다가, 부트스트랩 절차를 사용하는 종료 특징이 구현되었다. SNNS에서, 단조로운 제약 방법은 구현되지 않았다. 표준 절차에 대해서, 역전파 그리고 SCG, 일반 옵티마이저 사용, SNNS에서 표현된다, 그러나 R 코드에서 RSNNS으로 제어하는 이 부분으로써, 패키지의 향후 버전에서 고려될 것이다.
qrnn 패키지 qrnn (Cannon 2011b)은 정량적 회귀 신경망(quantile regression neural network)을 구현했다, 확률 밀도 예측을 하기 위해 사용, 특히 연속 그리고 이산 입력 변수 둘 다 있는 환경에서. 이것은 SNNS에서 구현되지 않았다.
frbf 패키지 frbf (Martins 2009)는 유연한 방사 기저 함수(flexible radial basis functions: Falcao et al. 2006)를 위한 알고리즘을 구현했다. 알고리즘은 오로지 분류를 위해 사용할 수 있다. 알고리즘은 훈련 데이터로 부터 망 위상(network topology)을 학습하는 비감독 학습의 첫번째 단계에서 작성된다, 그리고 나중에 각 분류에서 다른 커널을 사용한다. 알고리즘은 SNNS에 포함되지 않았다, 그러나 분류 그리고 그 자산에서 망 위상(network topology)의 생성은 RBF 동적 붕괴 조정 알고리즘(dynamic decay adjustment algorithm, Berthold and Diamond 1995)을 가지고 표현했다.

7.2. 코호넨 네트워크(Kohonen networks)

R의 몇 개의 패키지는 SOM을 구현한다. SNNS에서 구현된 버전은 유클리드안 거리(Euclidean distance) 그리고 이차 이웃(quadratic neighborhood)을 사용한다.
class 패키지 class (Venables and Ripley 2002)는 R에서 추천 패키지의 하나이다. 그것은 사각형(rectangular) 또는 육각형(hexagonal) 그리드, 그리고 학습 벡터 양자화 알고리즘(quantization algorithms) LVQ1, LVQ2.1, LVQ3, 그리고 OLVQ를 가지고 SOM을 구현한다. LVQ1는 오로지 승자 프로토타입을 적용한다, LVQ2.1 그리고 LVQ3는 두번째 최적 프로토타입을 적용하는 경우와 마찬가지. OLVQ는 모든 유닛에서 다른 학습 비를 사용한다. LVQ의 구현은 SNNS에서 표현된다, 그것은 동적 LVQ로 불림, 왜냐하면 그것은 빈 network/codebook을 가지고 시작한다, 그러나 연속적으로 새로운 유닛을 추가한다.
som 패키지 som (Yan 2010)은 자가-조직화 지도(self-organizing map)를 구현한다, 그것의 어플리케이션을 유전자 군집에 초점. 그것은 구현된 육각형(hexagonal) 그리고 사각형 위상을 가진다, 뿐만 아니라 기본 시각화 기능도 가짐.
kohonen 패키지 kohonen (Wehrens and Buydens 2007)은 표준 SOM을 구현한다, 뿐만 아니라 2개의 병렬 지도를 가지는 감독 SOM, 다중 병렬 지도를 가지는 SOM도 구현. 그것은 패키지 class를 기반으로 한다, 그것은 구현된 육각형(hexagonal) 그리고 이차 이웃 관계(quadratic neighborhood relationships) 뿐만 아니라 위상 지도를 가진다. 보통의 유클리드안 거리 이외에도, 분류 표기를 위해 타니모토 거리(Tanimoto distance)가 사용되었다.
분류 표기가 사용 가능할 때, SOM 훈련 동안 그들을 사용하는 방법에서 다양한 잠재적인 가능성이 있다. 쉬운 가능성은 단지 시각화하는 동안 그들을 사용한다 (6.3 절에서 처럼). 표준 SOM을 가지고 사용될 수 있는 다른 가능성은, 추가 특징으로 분류 표기를 추가한다, 아마도 가중치를 표기. 어쨌든, 이 패키지에서 구현된 방법은, Melssen et al. (2006)에 의해 주창, 다른 2개의 지도를 사용한다. 알고리즘은 교차-전파의 향상(enhancement of counterpropagation: Hecht-Nielsen 1987) 이다.
SOM의 감독 버전 이외에도, 패키지는 또한 지도를 위한 다양한 시각화 가능성을 제공한다.
wccsom 패키지 wccsom (Wehrens 2011)은 kohonen 패키지 저자의 다른 패키지이다. 그것은 다른 거리 측정을 구현했다, 가중 상호-상관(weighted cross-correlation: WCC). 게다가, 그것은 몇 개의 유닛을 가지고 시작하는 지도를 구현했다, 그리고 보간(interpolation)으로 훈련하는 동안 추가 유닛을 더했다. 이 방법은, 훈련이 더 빠르게 수행된다.

7.3. RSNNS의 가능성 및 제약 (Possibilities and limitations of RSNNS)

지금까지, 신경망 방법은 몇 개의 패키지에 흩어져 있다. RSNNS은 R에서 사용 가능한 SNNS 기능을 만듬으로써 R에서 표준 신경망 패키지의 부족을 다룬다, 그리고 그 안에서 많은 다른 표준 학습 절차와 구조에 일관된 인터페이스를 제공. R에서 사용 가능한 이미 구현되어 있는 것으로 이러한 모델 또는 알고리즘을 위해, 탄력적 전파(resilient propagation), 표준 역전파, 또는 DLVQ를 위한 것 처럼, RSNNS는 보완적으로 사용될 수 있는 대안을 제공한다 그리고 비교를 위해. SOM을 제외하고, 게다가 R에서 정교한(sophisticated) 패키지가 존재한다, 강력한 시각화 프로시저 그리고 유연한 네트워크 구성을 제공, 그래서 RSNNS에서 SOM 표준 구현의 사용은 일반적으로 이점을 가지지 않을 것이다. 그러나 RSNNS는 또한 많은 아키텍처와 그리고 전에 R에서 표현되지 않은 학습 프로시저를 이용 가능하게 만든다, 우리가 아는 한에 있어, 부분 반복 신경망(partial recurrent neural networks: Jordan and Elman nets), ART 이론, 연관 기억(associative memories), 홉필드 네트워크(Hopfield networks), 종속 상관 네트워크(cascade correlation networks), 또는 망 가지치기 알고리즘(network pruning algorithms).
SNNS은 많은 신경망 기술의 표준 구현을 가지는 강건하고 빠른 소프트웨어이다 (2장을 보라), 사용자의 거대한 그룹으로 수년간 사용으로 검증. RSNNS을 통해서 현대 실험 설계에서 SNNS의 증가로 약간의 주요 문제를 성공적으로 극복했다, 약간 다른 것은 지속. 1998년에 활발한 개발 종료로, 새로운 네트워트 타입은 표현되지 않았다. 어쨌든, 포괄적인 최근의 신경망 표준 패키지의 생성은 어려운 작업이다. CRAN에서 현재 이용 가능한 패키지는 주로 아키텍처 그리고/또는 학습 함수의 특별한 타입의 구현에 초점이 맞춰진다. 이 문장에서 중요한 의문이 보인다, 만약 RSNNS가 새로운 신경망 타입을 추가하기 위해 안정적인 아키텍처를 제공한다면. 비록 일반적으로 SNNS을 안정적인 아키텍처와 커널 API를 가지는 잘 작성된 소프트웨어이지만, 커널을 확장하기 위해서, 그것의 내부 지식이 필요하다, 그리고 네트워크는 SnnsCLib에서 직접 추가가 필요할 것이다, RSNNS의 현재 래핑 매커니즘은 일방향이므로, i.e., RSNNS는 R에서 SNNS 커널 내부로 부터 사용하기 위한 학습, 초기화, 또는 갱신 함수를 구현하게 허락되는 메커니즘이 제공되지 않는다.
그 자신의 래핑 매커니즘의 다른 제약을 제외하고, 저수준 인터페이스는 단지 사용자 인터페스가 아닌 완전한 접근을 제공한다, 그러나 또한 커널 부분이 아닌 약간의 함수(bignet), 그리고 원본 SNNS의 부분이 아닌 약간의 함수, 그러나 SnnsCLib를 위해 구현. 커널 인터페이스의 약간의 함수는 현재 래핑에서 제외되었다 ( 파일 KnownIssues를 보라, 패키지를 가지고 설치), 그러나 이것은 RSNNS의 기능의 제약이 아니다, 이런 함수는 보통은 중복 기능(redundant features)을 구현과 같음, 혹은 R에서 쉽게 구현할 수 있는 기능. 그래서, 저수준 인터페이스를 가지고, SNNS의 모든 기능을 사용할 수 있다.
저수준 인터페이스의 R 함수에 SNNS 커널의 직접 매핑과 달리, 고수준 인터페이스는 원본 SNNS 예제에서 주로 영감을 받아 작업-기반 기능(task-oriented functionality)을 구현했다. 고수준 함수는 망의 아키텍처를 정의한다, 그리고 학습 함수의 방법을 호출한다 (e.g., 반복인지 아닌지). 그래서, 고수준 함수는 여전히 매우 유연하다. 그리고 e.g., 함수 mlp는 학습 함수의 넓은 범위에서 적절하다. 자연적으로, 그러한 유연성이 필요하지 않은 경우가 있다, 그래서 예로 ART 네트워크는 그들의 특별한 학습 타입에서만 적절하다.

8. 결론 (Conclusions)

이 논문에서, 우리는 패키지 RSNNS을 표현했고 그리고 그것의 주요 특징을 설명했다. 그것은 유명한 SNNS 소프트웨어를 위한 R에서 래퍼가 필요하다. 그것은 신경망 그리고 시용의 편리함의 유연성/복잡성 간에 다른 수준의 트레이드-오프에서 API를 포함한다. 추가로, 그것은 모델의 다른 특징을 시각화하고 그리고 분석하기 위한 몇가지 툴을 제공한다. RSNNSSNNS의 복제(fork)를 포함한다, SnnsCLib로 불림, R에서 SNNS 기능의 통합을 위한 기초, 자동화/scriptability 그리고 병렬 처리가 중요한 규칙으로 여기는 환경. Rcpp 사용을 통해, 래핑 코드는 간단하게 유지되고 그리고 잘 캡슐화했다, 그래서 SnnsCLib는 또한 그 자신을 사용할 수 있다, R을 사용하지 않는 프로젝트에서. 네트워크의 유연성과 그리고 완전한 제어는 RSNNS 저수준 인터페이스 SnnsR을 통해서 주어진다. 구현된 호출 매커니즘은 객체 직열화(serialization) 그리고 에러 처리가 가능하다. 고수준 인터페이스 rsnns는 R 프로그램에서 많은 일반적인 SNNS 메서드의 자연스러운 통합을 허용한다.
추가적으로, 다양한 시나리오는 원본 SNNS의 결합된 사용이 존재하고 그리고 RSNNS가 유익할 수 있다. SNNS는 나중에 훈련되고 그리고 RSNNS을 사용하여 분석하는 네트워크를 생성하기 위한 에디터로써 사용될 수 있다. 혹은, RSNNS을 가지고 훈련된 망은 그것의 패턴으로 저장될 수 있고, 그리고 SNNS는 특정 패턴에서 망의 행동(혹은 혹은 망의 일부 또는 오로지 하나의 유닛 또는 연결)의 상세한 분석을 위해 사용될 수 있다.
7장에서 설명한 바와 같이, R에서 현재 이용 가능한 패키지는 별개의 네트워크 타입 또는 어플리케이션에 초점이 맞춰졌다, 그래서 RSNNS는 R을 위한 첮번째로 일반적인 목적의 신경망 패키지이다, 그리고 R에서 신경망을 위한 새로운 표준이 될 것이다.
이전   다음

댓글 없음:

댓글 쓰기