신경망은 정보를 처리하기 위해 뇌의 뉴런 간의 관계를 시뮬레이션하려고 합니다. 계산 모델에는 일반적으로 서로 연결된 많은 수의 노드가 필요합니다. 각 뉴런은 특별한 출력 함수를 통해 다른 이웃 뉴런의 가중치 입력 값을 처리합니다.
뉴런 간의 정보 전달 강도는 소위 가중치로 정의됩니다. 알고리즘은 가중치를 지속적으로 조정하여 자체 학습 과정을 구현합니다.
신경망은 위 그림과 같이 입력 레이어, 히든 레이어, 출력 레이어 등 여러 레이어로 나누어져 있습니다.
신경망 계산에는 수많은 행렬 계산이 포함됩니다. 선형 대수를 위한 오픈 소스 소프트웨어가 많이 있는데, Python에서 유명한 numpy가 있습니다. 또한 여러 가지 Javascript가 있습니다:
//m.sbmmt.com/
//m.sbmmt.com/
//m.sbmmt.com/
numericjs를 사용했는데 효과가 꽤 좋습니다. 모두가 시도해 보는 것이 좋습니다.
신경망을 훈련하기 위한 간단한 입력 및 출력 데이터가 있습니다. 여기의 각 행은 데이터 조각을 나타냅니다. 입력에는 JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명개의 매개변수가 있고 출력은 JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명개입니다.
Inputs 0 | Inputs JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | Inputs JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | Output |
---|---|---|---|
0 | 0 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | 0 |
JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 |
JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | 0 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 |
0 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | 0 |
먼저 히든 레이어가 없고 입력이 출력에 직접 연결되는 가장 간단한 신경망을 구현합니다.
입력은 JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명개의 매개변수이고 출력은 JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명이므로 신경망 입력 레이어에는 JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명개의 노드가 있고 출력은 JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명입니다.
// Sigmod function function nonlin(x, deriv) { if (deriv) { return numeric.mul(x, numeric.sub(JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, x)); } return numeric.p(JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, numeric.add(JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, numeric.exp(numeric.neg(x)))); } function train_neural(X, y, iteration) { // initialize weights var syn0 = numeric.sub(numeric.mul(JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, numeric.random([JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명])), JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명); //Training loop var i = 0; for (; i < iteration; i++) { var l0 = X; var lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 = nonlin(numeric.dot(l0, syn0)); var lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_error = numeric.sub(y, lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명); var lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_delta = numeric.mul(lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_error, nonlin(lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, true)); syn0 = numeric.add(syn0, numeric.dot(numeric.transpose(l0), lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_delta)); } } } //Initial input/ouput values var X = [ [0, 0, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [0, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명] ]; var y = [ [0], [0], [JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명] ]; train_neural(X, y, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명000);
훈련 코드 및 프로세스에 대한 간략한 소개
X 입력 데이터
y 출력 데이터
nonlin, S 함수
l0, 입력 데이터와 동일한 네트워크의 첫 번째 레이어
lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 네트워크 두 번째 레이어는 출력 레이어입니다.
syn0, 첫 번째 레이어 네트워크의 가중치
훈련은 먼저 초기 가중치를 부여하고, 이 가중치를 사용하여 출력 값을 계산하고, 목표 결과에서 이 값을 빼서 차이 값을 얻은 다음, 이 차이 값을 사용하여 가중치를 수정하는 것입니다.
JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명000회 반복 후 네트워크 출력: [0.0JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0.0JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0.979, 0.97JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명]
JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명000회 반복 후 Syn0 가중치 값: [7.JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명66, -0.JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, -JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명.JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명5]
여기 첫 번째 노드의 가중치가 더 크다는 것을 알 수 있으며 이는 데이터와 일치합니다. 데이터를 관찰하면 출력 값이 첫 번째 열의 입력 값과 강한 상관 관계가 있음을 알 수 있습니다. 반복 횟수가 증가하면 이 값은 더 커집니다.
Inputs 0 | Inputs JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | Inputs JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | Output |
---|---|---|---|
0 | 0 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | 0 |
0 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 |
JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | 0 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 |
JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 | 0 |
이제 새로운 데이터 세트를 관찰한 결과 첫 번째 열이 결과와 관련이 없음을 발견했습니다. 두 번째 열은 동일합니다. 결과는 0이고, 그렇지 않으면 JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명입니다. 이는 비선형 관계이므로 효과적으로 학습하기 위해 레이어를 추가하면 네트워크가 이렇게 됩니다.
// Sigmod function function nonlin(x, deriv) { if (deriv) { return numeric.mul(x, numeric.sub(JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, x)); } return numeric.p(JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, numeric.add(JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, numeric.exp(numeric.neg(x)))); } function train_neural(X, y, iteration) { // initialize weights var syn0 = [ [-0.JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명65JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명90JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0.JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명7JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명7966, -0.7JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명9JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명6JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, -0.60JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명7970JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [0.60JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명89JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0.9JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명65JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명5, -0.JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명7JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명5JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명6JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0.JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명8JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명6JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명5JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [0.75JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명778JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0.789JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, -0.8JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명99JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명58, -0.9JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명890JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명] ]; var synJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 = [ [-0.660JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명9JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명6], [0.756JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명850JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [-0.80JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명06JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [-0.JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명5778JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명75] ]; //Training loop var i = 0; for (; i < JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명000; i++) { var l0 = X; var lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 = nonlin(numeric.dot(l0, syn0)); var lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 = nonlin(numeric.dot(lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, synJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명)); var lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_error = numeric.sub(y, lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명); var lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_delta = numeric.mul(lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_error, nonlin(lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, true)); var lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_error = numeric.dot(lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_delta, numeric.transpose(synJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명)); var lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_delta = numeric.mul(lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_error, nonlin(lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, true)); synJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명 = numeric.add(synJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, numeric.dot(numeric.transpose(lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명), lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_delta)); syn0 = numeric.add(syn0, numeric.dot(numeric.transpose(l0), lJavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명_delta)); } } //Initial input/output values var X = [ [0, 0, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [0, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명] ]; var y = [ [0], [JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명], [0] ]; train_neural(X, y, JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명000);
훈련 과정은 이전 두 레이어와 크게 다르지 않으며 레이어가 하나 더 있습니다. 이 레이어를 추가하면 데이터의 복잡한 비선형 상관 관계를 효과적으로 학습할 수 있습니다.
JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명000회 반복 후 출력 값은 다음과 같습니다. [0.0JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0.95, 0.9JavaScript로 구현된 간단한 신경망 알고리즘에 대한 자세한 그래픽 및 텍스트 설명, 0.05]
syn0:
위는 상세한 그래픽과 텍스트로 간단한 신경망 알고리즘을 JavaScript로 구현합니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(m.sbmmt.com)를 주목하세요!